I made a mild college CS alarmist post today on /leftypol/ and was asked by a student for advice on what to avoid in school. I'm well aware of how contentious programming can get, often with people disagreeing on what even constitutes fact vs. opinion, so feel free to argue against anything I say or provide your own advice to any potential CS students.
Disclaimer: If you want to be a web-dev, none of what follows is applicable. Offer up your soul to the mad gods of JavaScript and prepare to live out your days in unspeakable agony.
Here is my generalized advice in terms of CS: take any class that is focused on implementation rather than theory. Theory is also very important but it is absolutely useless unless it relates to your actual programming experience. If you are not being assigned large or challenging projects, make your own.
Things to avoid or be skeptical of:
- You are primarily being tested on pen-and-paper. The only time programmers have to write algorithms without a debugger or at least a console to print to is in job interviews. You can fail every single test in algorithms class and still be a boss programmer. Tests like these are more akin to Math exams where you must provide proofs.
- You are being force-fed OOP (Object Oriented Programming), either by an academic ideologue or simply by virtue of using Java which basically forces it. OOP in programming epitomizes "ideology" in Zizek sense, it's an abstract model adored by academics who don't write code for actual users because of its perceived elegance and simplicity. However, real-world code ALWAYS has to deal with reality's messy edge cases, which renders any OOP code into a nightmare. There are about a million other reasons it's bad, there are many good lectures on YT.
- Dynamic languages. If you have never programmed you might not even know what this means. Some examples include Python, JavaScript, Lua, etc. These are good for very small applications, like scripts, support tools, toy programs, hobby use, etc. The problem is that they can often be slow, and generally let you make fatal mistakes that you won't even know about until you actually hit the bug in testing. Compiled languages (C, C++), on the other hand, have a huge amount of rules that the programmer must obey before they even run the program. If all the rules are satisfied, the compiler translates your code to a fast, efficient format that gets directly executed by the cpu. This ends up saving an enormous amount of time by catching mistakes before running the program, and it produces a faster result. You should ultimately learn both dynamic and compiled languages, but only the latter ultimately leads to enlightenment. And FOR GOD'S SAKE if you are making a large, non-trivial project, make it in an actual, compiled language.
Things to do:
- Figure out which direction to go in. Programming has an almost unlimited array of applications. Eventually you will have to specialize to a certain degree.
- Learn how to read code. This is brutal at first and only comes with time, but eventually you will learn how to. Whenever I find something interesting on github, I poke my head in and see if I can get any good ideas, or just observe how others solve the same problems I have.
- Learn a god-damn text editor. I use Vim. It's horrible at first, then it's pretty nice, then it's great, then it becomes part of your being.
- Be optimistic. Yes, I know, this sounds retarded, but hear me out. I knew before I ever started programming that it absolutely MUST feel amazing to be a really good programmer. I still have a lot to learn but these days I can tackle most problems that come up without consulting the internet and holy fuck does it feel good.
Message too long. Click
here
to view full text.
36 posts and 4 images omitted.