By the senior levels you can't really tell the difference between someone with or without a CS degree. Experience definitely beats textbook knowledge after a couple of years.
By the senior levels you can't really tell the difference between someone with or without a CS degree. Experience definitely beats textbook knowledge after a couple of years.
In actuality the things you learn in a 4 year CS program that you wouldn't get elsewhere (algorithm performance, theory, etc.) don't apply to all professional engineering jobs (especially at the junior level). Triplebyte has some great data on how bootcamp grads fair against CS grads (https://triplebyte.com/blog/bootcamps-vs-college) and my takeaway from this (and from personal experience) is that at the junior level it almost makes no practical difference.
After college/university you begin to forget a lot of the specific textbook stuff and begin to replace it with the put-food-on-your-table practical stuff.
"The execution time of algorithm A scales up with the number of items, while algoritm B's is constant."
vs
"The execution time of algorithm A is O(n), while algorithm B's is O(1)."
I've spent so much time trying to chase down bugs caused by junior programmers because something that worked fine with 100 rows in db, slows to a crawl when we move a feature out of beta and we suddenly have 1000 rows.
If they had some idea that the query they were writing was O(n^3) they could have done a quick estimate and saved us all the trouble.
You can learn it in like 30 minutes, and understanding the concept behind it (not just the notation) is the core of understanding why some algorithms work better than others.
Even in school, Big-O is used almost exclusively, very rarely do you see Big-Omega, Big-Theta, Little-O, etc. Even though in algorithmic analysis these are all used to give a more accurate characterization of the algorithms behavior.
Its funny, too, because the professionals (that are admittedly very smart) that like to talk down about Big-O as if it was a waste of time, seem to not realize there is a whole taxonomy of tools for analyzing and characterizing algorithmic complexity...
I did Chem engineering in college, but have been programming since I was 17.
Now I've moved to electrical design Engineering since it seems to be a hybrid of engineering and programming.
So far my job is understanding everything that goes into my complex system. I'm not sure if this or embedded programming is my future. What is more valuable?
Traditional engineering skills are very undervalued in this industry and I've met very few "engineers" in this field who understand engineering basics like control systems. IMO that's very valuable for building the systems we build -- I can't tell you how many half-baked implementations of some of the parts of PID I've seen kicking around.
And I say that as a completely self-taught, college dropout senior developer.
In fact, I have a perfect counter example. At reddit, to even out load on our databases, we built a system that would take into account current load on the database when choosing which read slave to select. As it turns out, this doesn't work well, because you overwhelm the slave with the lowest load because the the reaction time is too slow compared to the request time. We had to tweak it to account for this.
Had we known control theory, we would not have made this mistake. On the other hand, that mistake didn't cause us that much damage and we were able to devise a solution that ended up being right. :)
I do a lot of embedded work without a CS degree. Every board and chip is different, so you learn by doing. But,at the same time a lot of hardware is basically the same. You have some low power cpu and a bunch of standard peripherals. Once you know how most of them work, it's just engineering to figure out what libraries you need.
There's lots of work in embedded that's for sure. There's also a huge amount of variety depending how close to the metal you want to be.
While the guys without a degree are able to have a quick discussion, and come up with an approach they think is best.
I don't have a degree but made it far enough in school to take algorithms and we didn't learn A*.. I think there will always be holes in someone's knowledge since schools have different requirements.
Agreed. Absolutely correct!
They may read a textbook to teach themselves but it'll be different than the textbooks they make you read for a CS degree.
This typically is a benefit, many fresh CS grades I've seen are not as comfortable developing in their first job as a lot of self taught developers.