5 ms·
Two questions: Do I get my youth back? I've been programming for 40 years and have easily logged 100K hours learning. I don't have the lifespan to do that ag
by kbob 9y ago
Two questions:
Do I get my youth back? I've been programming for 40 years and have easily logged 100K hours learning. I don't have the lifespan to do that again, so I'd just try to gain some superficial understanding that could be picked up in 10 years and 20K hours.
Do I start over with 2018 technology or 1978 technology? If the latter, I'd probably just repeat what I did, maybe spend more time on functional programming and language design early on. Languages: Lisp family, Fortran, Basic, APL, C, early C++, Perl, Python, Haskell, Rust. I'd skip PL/1. (-: Problem domains: OS, compilers, scientific programming, realtime, graphics, networks & distributed systems. Do more web development after Javascript is invented.
So, if I get another 40 years (and counting) starting in 2018, it would go like this. These would overlap, but would be semi-chronological.
1. Functional programming. Lisp (probably Clojure) and Haskell. Make parsers, pattern matchers, symbolic math, the kind of stuff in the Lisp textbooks.
2. OOP. Python and Smalltalk. Build systems with big taxonomies like GUIs. Study design patterns. Take Squeak Smalltalk apart down to the atoms and reimplement it from the bottom up. That might best be done in C or Rust; see below.
3. System-level programming: C and Rust. C because it's ubiquitous, and Rust because programming in memory-unsafe languages is not sustainable. Projects: reimplement any Unix utilities -- many of them are easy 1-2 day exercises. Implement Forth. Write an OS or two. Reimplement L4. Write robust distributed systems. Build real time applications on microcontrollers.
4. AI. Machine learning and also the not-currently-trendy techniques. No tool recommendations yet because I'm still a noob here.
4. Hardware. KiCad and VHDL. Make simple PCBs to interface simple things. Implement CPUs with nontraditional architectures (e.g., dataflow, associative memory, Forth machines) just to understand computing at its most deconstructed.
5. Web technologies. I'm also a noob here, but it's a skillset I regret that I haven't learned.
And I would NOT use Emacs again. It's wonderfully powerful but it's past its prime. I've locked myself in. I should have changed editors/IDEs every couple of years.
- jhayward 9y ago> And I would NOT use Emacs again. It's wonderfully powerful but it's past its prime This is an interesting note. To everyone who picked up their prime IDE in the last say, 10 years: Which editor or IDE do you use, and why?
- earenndil 9y agoVim. And I say to the grandparent, what makes you say emacs is past its prime? And if it is, why should that mean you shouldn't use it? If it's powerful enough for you to do what you want to do and do it effeciently then what does it matter even if there are 5 other people using it (and there are a lot more than that!).
- kbob 9y agoEmacs has a different way of doing just about everything than the rest of the desktop environment. Kill ring vs clipboard. Emacs windows/frames vs GUI tabs/windows. Subshells vs ⌘Tab to Terminal. C-X C-C vs ⌘Q. Actually, all the default keybindings are gratuitously different from other text applications. Most of these are different because Emacs invented them for non-GUI terminals before any conventions existed. But now it's just cognitive overhead to have two ways to do everything, depending on which app is active. It's powerful, but I believe I'm stuck on a suboptimal local maximum. A similarly powerful IDE better integrated with the rest of the system would be better, but unlearning and relearning is more effort than I'm willing to invest at any time. The size of the community matters if you want third-party add-ons.
- earenndil 9y ago> A similarly powerful IDE better integrated with the rest of the system would be better Does one exist? (I'd preach vim to you but I don't want to perpetuate editor wars.