3 ms·
Computer Science is to software development like theoretical mathematics is to economics. Sure, there are some formulas in economics, but 99.99% of the time yo
by lmilcin 5y ago
Computer Science is to software development like theoretical mathematics is to economics.
Sure, there are some formulas in economics, but 99.99% of the time you are not going to prove anything mathematically and you are just looking up a formula written by somebody else. On the other hand economics has a huge amount of stuff that is not covered by mathematics at all.
It is disheartening to see so many people wasting so much of their potential by studying CS when they know they will get into software development anyway. Rather than racking education costs they could be earning money and gaining experience.
I have been constantly hiring for the past 15 years and I have learned to stop caring about CS. Real world experience is worth more than comparable time spent studying CS.
The only reason I may prefer a candidate with a degree is because it takes a lot of work and perseverance to stick to the goal of earning the degree, but I almost don't care what kind of technical degree you have earned.
One more point, it is not like academia is the only place where you can learn CS! In some areas of knowledge and at bleeding edge of it you may need access to people, but basic CS knowledge that can ever be even potentially useful at development work is all well documented in a huge selection of very good books.
You can pick them up and learn.
Good developers treat learning as part of their work, and it doesn't matter if something was not taught at school -- if they notice they are missing some knowledge they will just learn it.
If you need to study something I think it is better to study something orthogonal to what you are going to be doing. This can help create unique profile for you as a developer.
For example I have studied theoretical math and over the years I came to conclusion that was much better choice than going to CS. I have learned logical thinking and dealing with complex abstract problems. I have learned most of the CS stuff anyway while doing my work but I would probably never learn most of what I learned in math.
Other good directions of studies would be philosophy, visual arts, management, accounting -- you see the picture. Any of these could provide you with an edge as a developer for particular set of problems.
- incognito_limey 5y agoThis also reflects how broken hiring is in tech. Leetcode and algorithm memorisation has very little to do with being a "good" developer. Can you communicate your ideas well? Can you understand and follow up when requirements are not clear? Are you able to work with others well? This last point in particular is where I find a lot of candidates fall down. They maybe able to invert a binary tree, but if they have to have an actual conversation with say an end user to help resolve/understand a problem, many of them can't.
- lmilcin 5y agoThat is exactly what I am seeing. I think of things like ability to communicate, lead, etc. as force multipliers. It does not matter much how good your technical skills are if other force multipliers are very low. More than that, people who are bad at communicating and relations tend to stay away from these problems -- trying to bring every problem to technical level -- basically ensuring they are continuing to be at a disadvantage.
- cableshaft 5y agoWhile I would agree that a Computer Science degree doesn't necessarily teach you a whole lot about Software Engineering (i.e. little-to-no time spent on version control, continuous integration, unit testing, microservice architecture, deployment, requirements gathering, data security, etc), it did give me a broad exposure to the different types of work that could be out there for programming, which would be a lot harder to do in the job market (i.e. no one is going to look at my web/game development history and go 'Yeah, this guy would be a good person to hire to work on our operating system!') I learned about making Operating Systems, Compilers, 3D Graphics, Artificial Intelligence, Machine Learning, TCP/IP Networking, Databases, low-level Assembly programming, and how computers work at a hardware logic gate level, to name a few. And they offered other courses as well, these are just what I picked from the offerings. Yeah, there was the standard Data Structures and Algorithms class (which in the business world is now not much more than a 'you better know/refresh this if you want to get through our interviews' class) and one class that was about Automata theory, which my teacher would claim 'is the only real computer science class at this school' which was all mathematical proofs, but it still helps you understand regular expressions better, at least it did for me. But most of the classes I took would have had practical applications in the workforce, for different types of jobs. But really isn't that pretty much any undergraduate major? The classes you take aren't all going to be directly relevant to your particular path through the field, it's more about exposure to different possibilities and providing a broad base of knowledge to build from.
- amusedcyclist 5y agoI mean if you're only hiring people to do basic web dev (front or back end) then yeah sure you don't need a CS degree, but for anything complex having a real education in CS/Math/Engineering is definitely required. Someone building a database engine or compiler isn't doing the same thing as someone building a wordpress website or someone who integrates apps into salesforce. The latter don't really require a CS education but the former definitely do. Over time I imagine the split will be made more formal and we will see the "developer" job category split up more granularly.
- lmilcin 5y agoIf you look at projects, development overwhelmingly consists of websites, mobile applications and backend systems. And backend systems overwhelmingly REST APIs or some message consumers that just translate the call to couple database calls to translate the response back to the client. Even if you go somewhere like Google you will find most of their systems are just REST APIs as described above. Now, there obviously is a lot of interesting projects for you compiler or OS lovers. But there is so much choice you don't have to be ready to work on them. I mean, I don't need to learn robotics just because 0.2% (entirely made up number) of projects on job market are about writing software to control robots. So, to sum up: -- if you are in it for money, don't waste time on studying CS, just learn basic programming and hop on any project. -- learn on your employers time. How fun it is being paid and learning? -- you don't need to get every job. You only need to get one (every three years...) -- most projects are boring from the point of view of programming techniques you are going to be using. Learn to find fun somewhere else. -- if you want fun projects you can always learn what you need on your own (on your or your employers time). You aren't going to be good developer if you don't spend considerable amount of time learning for the rest of your life, anyway. Just get used to spending time learning new stuff every day.