How I wasted my tech life in college
Oh, College !! Great memories. As the resident codegeek (atleast in and around my immediate rooms), I spent most of my time on the latest fads in tech. I would be the first to download the newest and shiniest IDE. My laptop would be always downloading some new linux distro or the latest OS updates for windows or just some new database which I just had to install. I must’ve spent (or rather wasted) 100’s of hours setting up virtual machines (or vagrant boxes) to create that ideal system where I could be productive as a Gamer (Aoe 2, baby) and switch to code/assignments on a nix machine when I needed. And of course, there would always be a torrent running — Ok, maybe that’s not really tech. And of course, countless hours spent on fixing peoples systems and in many cases debugging them. Every few months, we always came back to some code challenge and retry our luck learning algorithms from the Cormen book. I also cannot image the amount of time I must have wasted setting/learning build tools like Ant, Maven, gems, npm, Make e.t.c without knowing anything about the lang or in many cases why I was learning it.
The boon and bane of Tech talks and tech groups
In my college, we had enough tech evangelists — People teaching and in some cases preaching, the latest and greatest tech to come out from Oracle and Microsoft. In fact, we ended up starting one in my 3rd year. Why ?, Well Why not. All the cool kids were doing it, we were sure we could give out a few talks and wow some juniors.
The hard truth was that before you had time to actually understand and check something out, you would be distracted by something happening somewhere else. A new code competition, maybe a new language, some weird project which we believe has never been done — Or if you are particularly unlucky, a new crush :D
A New leaf — Grad school, USA
After working for 2 years in Ascendant tech. — a company which generally dealt with IBM stuff and a year in Snapdeal. I headed off to do my MS and I was determined to make better use of my time this time around. While working, its generally harder to spend a lot of time learning something totally new and I was sure I could do a much better job this time round in grad school.
I had admittedly also become better and wiser in those 3 years which helped me avoid pitfalls from my UG. Add to it — the professors were admittedly far better, so I did have assignments which in many cases were architected with better practices. For someone who hadn’t really written enough Unit tests, It was great to be exposed to assignments which were corrected by running a bunch of unknown unit tests on them — that was just cool. I feel that many of these projects and the work I did in my RA with profs/researchers who were unnervingly good at code is what made me eventually better than my pitiful level coming out of college.
Enough of my ranting, let me tell you what I learned
- Algorithms are just a very small part of computer science. Its definitely not the only part as code competitions make you feel
- Use a tick-tock cycle, try to code something useful or learn something new before embarking on that new IDE or the new build system or in todays world, probably some cloud setup or docker or kubernetes. Core CS concepts are way more important than this, and a person with Notepad and CS know how is better than the cool kid with hi-fi eclipse setup or emacs setup with the shiniest SDK’s and an AWS account
- Charge people for setting up their system in money or favors. Do this, thank me later. Today’s OS’s are easy enough to install for that tech noob from Mechanical — Tell them to google and exit the room.
- Don’t waste time setting up the latest IDE or a new DSL because you think that it can help you make a new App quickly with less code. Take the path of least resistance and follow stuff with the most comprehensive tutorial, you can explore later. [This is probably a repeat of 2 but it needs to be emphasised]
- Write Dirty but working code. I cannot emphasise this enough, Do not fall for good code practices, separation of concerns, MVC patterns (unless its an assignment :D). Get things done and get them done quickly. A shiny new application will keep you motivated, not beautiful code which just does something more than a Hello world. Also most people just learn it the hard way or from work :D
- Write blogs, articles whether you publish them or not. You learn so much about what you learned and what you missed when you are writing it out. Also, it becomes a permanent memory and 1 look is all it takes for it to come back.
- Learning an SDK is not learning computer science. Example: Learning the android Api (or memorizing it) will not make you better. But, definitely creating a cool new app might help (or at least keep the fire alive). I remember my countless hours (over multiple tries) on the Qt toolkit and not making anything of note
- If you feel/understand something well, then pursue it to the limits. A short attention span is probably your biggest enemy. I can’t imagine the countless langs or SDK’s I must have written 3–4 programs, only to get stuck at something and never to come back again. (Legend has it that, some of these projects are still in my old hard disks and awaiting completion)
- Every field of CS is eventually Math, You’ll have to eventually deal with it if you are really interested in it. Code has nothing to do with it, though it helps to be a good coder. Good news is that, much of it is abstracted away in libraries in real work life.
Well, That’s just my experience. It might not really apply to you, but odds are that it may not be too far from your experience. My experience would probably hold truer for undergraduate students in India, but lot of these points apply to me even today and probably even to the working people. When it comes to it, if I had known what I know now — I probably would have been a competent coder in half the time (and probably spent more time on the important stuff like winning AOE tournaments :D )