I’m still not a programmer myself, but I have learned programming since I was very young, so maybe I can contribute something to the discussion.
First of all, you have identified the skills that you lack. Good start. Anyway, 1–2 years can mean a lot or just a little depends on how much you spend on learning. If you spend 8 hours a day, that’s a lot.
So you’d improve your skills by this (you’ll find this list contains much more low-level skills than other answers):
- Find something to code (that’s the hard part for me). If your CS club members can find the project with you, get help from them. If not just quit the club (because they are guiding you to a wrong direction).
- Start coding. You may start from scratch or inherit some legacy code and/or some library.
- Finish your program, and try to improve it, and fix the bugs.
- Somehow YOU’LL HIT A WALL. Maybe you’re unable to solve a specific problem (the problem looks easy, but is actually very hard). Maybe you find your code not maintainable (too many bugs, too each to introduce bugs, and bugs too hard to fix). Maybe you find yourself repeating yourself a lot (it’s time to use functions and classes wisely). Maybe you forgot what you have written (you didn’t write good documentation and tests).
- When you hit a wall, it’s time to read about software design, i.e. expressive naming, when to/not to comment, testing, design patterns, version control, etc. Books in refactoring is also helpful.
- After the reflection, start another project. You’re better in software design now. You may continue to work with your current project, but your code is likely not maintainable.
- Repeat the process several times (I guess 5 is enough)… and if possible try different parts of the “full-stack”, i.e. console, GUI, web, database, CLI, etc. And SOME of your programs should be written in a strongly typed language.
- You’ll make a lot of mistakes. Don’t worry about this. Making mistakes makes you better, especially in software design.
Anyway I wouldn’t recommend you to join existing open-source projects right at the start. This is a nice thing to do (indeed very nice if someone can coach you during your work with the project), but big open-source projects has a high entry barrier. (I tried with Chromium myself, and found myself reading thousands of lines of code (and also C++ reference, coding style guides, etc.) before starting to write my first non-trivial patch.) DO join open-source project, but only after you acquire necessary skills.
Now for the algorithm part. My recommendation is to acquire solid math skills. And do learn about algorithms and data structures, since they helps a lot with your projects.
But don’t delve into these too far right at the beginning, because you need to improve your software design skills first. When you get decent software design skills, you’ll look at algorithm problems in a different light (especially if your CS don’t provide good OOP courses), and can learn about algorithms more thoroughly.
Last but not least, good English DOES matter, even if you are not writing any comment. That’s one of the things I’ve learned in Chromium project.
And finally, GL and HF with programming!
mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev mbilaldev
Comments
Post a Comment