4 ms·
10 tips for advancing from a beginner to an intermediate developer
- tptacek 17y agoWow. How amazingly boring. Let's see if I can do better in 4 minutes. No particular order: 1. Start and complete small personal projects. If you don't finish them, they have negative utility for you. It's fine to start ambitious things, as long as you keep starting and finishing other things. Momentum matters. 2. Pick projects that will force you to learn new things. Graphics. Signal processing. Math. SQL. External hashing. Networking. Distributed systems. Concurrency. Code generation. Parsing. Natural language. User interface. You will never run out of things. Don't pigeonhole yourself. 3. Have some kind of UI toolkit. Attention matters. It's easier to get attention to your work when people can play with it. You'll need it anyways. jQuery is a fine answer. 4. Add a small feature to a favorite open source app. It'll force you to absorb how the app is designed and built without requiring you to completely understand it, and it has a payoff (see #1). 5. Fix a bug in an open source app. Harder than #4, approximates dealing with bugginess on real teams, where problems are caused by code you didn't write, builds debugging muscles, crucial. 6. Learn enough assembly to know how the stack works. Even Python programs run off the stack. Helps debugging. Helps you understand what's "possible", why things are slow and why things are fast. Makes new languages easier to learn. Assembly is like Latin that way. 7. Really, really learn GDB (or WinDBG). Momentum matters. Nothing kills momentum like a 15 minute rebuild cycle just to get a new printf-debugger. Even Python programs segfault when they get really interesting. 8. Read code. But you knew this, right? 9. Build a personal library. This is so important that it's an interview question for me. "What's in libyou.so?" Builds momentum (that much easier to start the next project). Gives you something to look at and reflect on. Solves tedious problems with finality (memory management, data structures), instead of allowing you to blow them off in future projects. 10. Learn a profiler. You don't know how to make code performant until you know ot to generate and read a profile, and design experiments around them. This is even more important than unit testing.
- warp 17y agoInteresting. I don't have #9. Ofcourse I sometimes re-use code I've written for previous projects, but mostly by forking and adapting the code for the task at hand.
- tsally 17y agoI find that thinking "could I turn this into a library?" whenever I code improves the quality of my code dramatically (whether it gets turned into a library eventually or not). Starting with the goals of quality and reuse is always a good thing.