> People like that will always be more effective at their job once employed
This is honestly not my experience with self taught programmers. They can produce excellent code in a vacuum but they often lack a ton of foundational stuff
In a past job, I had to untangle a massive nested loop structure written by a self taught dev, which did work but ran extremely slowly
He was very confused and asked me to explain why my code ran fast, his ran slow, because "it was the same number of loops"
I tried to explain Big O, linear versus exponential complexity, etc, but he really didn't get it
But the company was very impressed by him and considered him our "rockstar" because he produced high volumes of code very quickly
I was self taught before I studied, most of the "foundational" knowledge is very easy to acquire. I've mentored some self-taught juniors and they surprised me at how fast they picked up concepts like big O just by looking at a few examples.
Big O was just an anecdote for example
My point is you don't know what you don't know. There is really only so far you can get by just noodling around on your own, at some point we have to learn from more experienced people to get to the next level
School is a much more consistent path to gain that knowledge than just diving in
It's not the only path, but it turns out that people like consistency
I would like a book recommendation for the things I don’t know please (Sarcasm but seriously)…
A senior dev mentioned a “class invariant” the other day And I just had no idea what that was because I’ve never been exposed to it… So I suppose the question I have is what should I be exposed to in order to know that? What else is there that I need to learn about software engineering that I don’t know that is similarly going to be embarrassing on the job if I don’t know it? I’ve got books like cracking the coding interview and software engineering at Google… But I am missing a huge gap because I was unable to finish my masters and computer science :-(
I ran into that particular term oodles in Domain-Driven Design, Tackling Complexity at the Heart of Software by Eric Evans. Pretty dense, though. I’ve heard that more recent formulations of the subject are more approachable.
CLRS
(Serious comment! It's "the" algorithms book).
Tyvm for the serious comment, i_am_proteus! :-) The algorithms book By Steve S. (The Algorithm Design Manual)?
I've read that one, not an expert by any means, and I've got a 'decent' handle on data structues, but what about the software engineering basics one needs like OOP vs. Functional, SOLID, interfaces, class invariants, class design, etc.? Should I just pick up any CS 101 textbook? Or any good MIT open courseware classes that cover this type of stuff (preferably with video lectures... intro to algorithms is _amazing_ they have Eric's classes uploaded to YouTube, but finding good resources to level-up as a SWE has proved somewhat challenging)
^ serious comment as well... I find myself "swimming" when I hear certain terms used in the field and I am trying to catch up a bit (esp. as an SRE with self-taught SRE skills that is supposed to know this stuff)
Ah! Nvm, I see you mean https://github.com/walkccc/CLRS (didn't catch the acronym was the authors names smushed together at first)
> This website contains nearly complete solutions to the bible textbook - Introduction to Algorithms Third Edition, published by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein.
> most of the "foundational" knowledge is very easy to acquire
But you have to know this knowledge exists in the first place. That's part of the appeal of university teaching: it makes you aware of many different paradigms. So the day you stumble on one of them you know where to look for a solution. And usually you learn how to read (and not to fear) reading scientific papers which can be useful. And statistics.
It doesn't seem to matter if someone went to university. I have had to unpick crap code from uni grads and self taught. Experience may be the only true reliable tell, and I don't mean jobs held I mean world experience on projects.
There are also different types of self taught, and different types of uni grad. You have people who love code, have a passion for learning, and that's driven them to gain a lot of experience. Then you have those who needed to make a living, and haven't really stretched beyond their wheelhouse so lack a lot of diverse experience. Both are totally fine and capable of some work, but you would have better luck with novel work from an experienced passionate coder. Uni trained or not.
> but you would have better luck with novel work from an experienced passionate coder. Uni trained or not.
I have not learned CS at university (maths & stats graduate who shifted to programming, because I can't help myself loving it). I work with engineers with CS degrees from pretty good universities. At the risk of sounding arrogant, I write better code then a lot of them (and some of them write code that it so clean and tight that I wish I could match it). Purely based on my fairly considerable experience, there is basically little correlation between degree and quality of code. There is non-trivial correlation between raw intelligence and the output. And there is a massive correlation between how much one cares about the quality of the work and the output.
s/self taught/degreed/g and it's still true. It's a skill issue no matter the pedigree.
I literally said as much?
> Not to discredit University degrees of course - the best devs will have gotten formal teaching and code in their free time.
The disagreement is over the highlighted line:
>People like that will always be more effective at their job once employed
My experience is that "self taught" people are passionate about solving the parts they consider fun but do not have the breadth to be as effective as most people who have formal training but less passion. The previous poster also called out real issues with this kind of developer (not understanding time complexity or how to fix things) that I have repeatedly seen in practice.
But the sentence is about people coding in their free time vs not doing so... If you take an issue with that, you argue that self taught people that don't code in their free time are better at coding the the people that do - or people with formal training that don't code in their free time being better at it vs people that have formal training and do...
I just pointed out that removing classes entirely would still get you experiences people. Even if they'd likely be better if they code and get formal training. I stated that very plainly
> I stated that very plainly
You actually didn't state it very plainly at all. Your initial post is contradictory, look at these two statements side by side
> There will always be individuals that enjoy coding and do so without any formal teaching. People like that will always be more effective at their job once employed
> the best devs will have gotten formal teaching and code in their free time
People who enjoy coding without formal training -> more effective
People who enjoy coding and have formal training -> best devs
Anyways I get what you were trying to say, now. You just did not do a very good job of saying it imo. Sorry for the misunderstanding
I read this one:
> There will always be individuals that enjoy coding and do so without any formal teaching. People like that will always be more effective at their job once employed
As "people who enjoy coding and didn't need formal training to get started". It includes both people who have and don't have formal training.
Both statements together are (enthusiasm + formal) > (enthusiasm without formal) > (formal without enthusiasm).
Sure that's a valid interpretation but it wasn't how I read it
> Both statements together are (enthusiasm + formal) > (enthusiasm without formal) > (formal without enthusiasm).
I don't think the last category (formal education without enthusiasm) really exists, I think it is a bit of a strawman being held up by people who are *~passionate~*
I suspect that without any enthusiasm, people will not make it through any kind of formal education program, in reality
Uh, almost nobody I've worked with to date codes in their free time with any kind of regularity.
If you've never encountered the average 9-5 dev that just does the least amount of effort they can get away with, then I have to apploud the HR departments of the companies you've worked for. Whatever they're doing, they're doing splendid work.
And almost all of my coworkers are university grads that do literally the same you've used as an example for non formally taught people: they write abysmally performing code because they often have an unreasonable fixation on practices like inversion of control (as a random example).
As a particularly hilarious example I've had to explain to such a developer that an includes check on a large list in a dynamic language such as JS performs abysmally
Many of these people have a normal life outside of work and different hobbies or a social life. Many of them had been glued to their screens and keyboards too but evolved into a different stage in their lives. Former passions could turn into a discipline. I personally am not on my computer outside of 9-5 because thats already enough. I admit that don’t have the same passion I had in my 20s and yet Im effective in doing my work and am quite fulfilled.
this time I agree that my wording was unclear.
While you definitely loose acuity once you stop exploring new concepts in your free time, the amount of knowledge gained after you've already spend 10-20 yrs coding drops off a cliff, making this time investment in your free time progressively less essential.
My pint was that most of my coworkers never went through an enthusiastic phase in which they coded in their free time. Neither pre university nor during or after. And it's very easy noticeable that they're not particularly good at coding either.
Personally, I think it's just that people that are good at coding inevitably become enthusiastic enough to do it in their free time, at least for a few years. Hence the inverse is true: people that didn't go through such a phase (which most of my coworkers are)... Aren't very good at it. Wherever they went to university and got a degree or not.
> an includes check on a large list in a dynamic language such as JS performs abysmally
Does it perform any better in statically compiled languages?
Depends on the implementation. E.g. Javas HashSets include has the same performance profile as a Map lookup. Its still not particularly performant with large datasets, but significantly less abysmal then a regular JS .includes().
I just didn't want to explore the example to such a depth, as it felt irrelevant to me at the time of writing.