No company will pay you for several years just to learn complexity theory, write sorting algorithms, study schedulers, rewrite UNIX tools, understand hardware architectures, etc... They want you to be productive right away, and the shortest path is just to follow recipes with the latest framework.
That's the point of education, universities teach you what you won't learn on the job. So that when you finally get to work, you will have a better understanding of what you are doing.
In fact programming is just a tool used to implement CS ideas and demonstrate their application in the real world.
In my degree we spent maybe the first 6 weeks on actual learnjng-to-program (in turbo pascal.) Then another later on in Scheme. In 3nd year we did C, I don't recall what instruction we had there - maybe a week? Then 2 weeks in 3rd year where we did 10 different languages in 10 days.
Language was considered a distraction from the science part.
No, it's not reading books about swinging hammers. We were learning about physical forces on wood, and by wood, and other construction materials. We learned the difference between a spice rack, the drawer, and the 40-floor building to house the spice rack.
Sure we wielded the hammer like Thor. But the focus was on the hammered not the hammer.
I'd wager that I'm interested in a niche of CS, mostly the internet, and websites, and apps and what not. So when I tried to learn C and code unix tools I just felt miserable tbh.
Science !== building
I agree langauge and syntax are just distractions from the -building- part.
In software engineering there's infinte hammers and you can build new hammers out of old hammers btw
"Oh I don't know how to code. We don't write programs in CS Theory."
Then there are the requirements gathering that lead us down this road. And the stakeholders that forgot important details. And that one team that has a hard production dependendency on an obscure DB table you only keep around because it simplifies a join somewhere.
Teach students of CS the latter, and they have a much greater opportunity to be successful.
Computer Science is akin to learning how to forge a hammer, what materials to use in said hammer, and then determining what size and shape is applicable for a given task.
Sometimes the specified hammer is made. Most times it is not.
"Swinging hammers" is rarely, if ever, considered.
After a career completely unrelated to manufacturing I've come back to basic metalwork as a hobby. What interests me is working with non-computer driven tools like lathes and mills.
What really surprises me is how much can be achieved just with hand tools like saws, files and chisels. I have books on filing as a way to shape metal by hand.
This is worth knowing because sometimes it's sometimes the quickest way get something done. Especially, when the first part of an alternative process would be "order tool X from the internet".
So it goes with solving problems with software. It's sometimes quicker to implement something I learnt on my second degree in CS than to spend time searching to see if a well supported library covers exactly what's needed for a very specific, temporary use-case.
They argue that bootcamps and quick courses are enough, or that chatgpt exists now so programming is a dead profession.
I disagree, I think I've had a lot of use from having had education… but I might be biased. But I've had to explain things occasionally.
If you plan to be a programmer all your life, and a journey-man one at that, then feel free to learn-programming-in-21-days.
If you're planning a career in software, then I think understanding fundamentals (database normalisation, the Order of a solution, the ideas of Coupling and Uncoupling, memory usage versus performance, the impact of CPU cache, multi-threading safely, operating system task priorities, compilers, and a good few more things that underpin the science behind building software, then a degree is helpful.
Not because of the books, you can get those at home, but because of the structure (ie the path through the carriculim) the mentorship from professors, TAs and so on, and most of all the exposure to your peers - the wonder of collectively pushing each other to explore beyond the curriculum, beyond just this week's assignment.
Most of all it teaches intellectual curiosity- that spark some people have to see something in code they don't recognise, understand the novelty of it, and go and find out about it. It's easy to keep up because you have the structural foundations to absorb new things all the time.
ChatGPT can't do the things I do, and even calling it ChatGPT is a shallow understanding of why not. Broadly speaking LLMs are a tool I can use to learn new things, which is great, it knows how to weild many kinds of hammer. But it doesn't understand the nuance and context of building a whole building. One which has never been built before.
Precisely because LLMs are good at regurgitating the past, but understand literally nothing, they only replace programmers who are good at regurgitating the past (writing code) but understand very little about what that code -means- (as distinct from what it -does-)
Of course each College is different, and YMMV, but if you gave the time, and resources, and opportunity to do a formal degree, then I think it worth it in the long run. But like most things in life you get out what you put in. The curriculum is just the hint of a starting point to what you learn there, don't go to "be taught", go to suck the marrow from each moment, to actively "learn" from the challenges you set yourself.
This is not to suggest that there is a rigid distinction between the two — all software architects are going to also be software developers in the process of building an architecture, or when new architecture is not needed, and many software developers will occasionally act as software architects. Nor is this intended to suggest that the architecture of a software project must be planned out in advance with all of the concepts and data and control flow either — just that there are points in the process of developing software where these large-scale architectural decisions about what abstractions to use and the flow between them must be made. But there do seem to be two somewhat distinct "hats" people who program wear.
By the time he was done formalizing what needs to be done and philosophizing about the best approach (while actively trying to prevent the engineers from hacking away), the programmers and hardware engineers delivered a production prototype that works just fine and that people want to buy.
Previously the same company had hired one of my previous coworkers as a "software/solutions architect" and he had basically the same trajectory but with him at least I suspect he was just burned out. With that said, seeing someone has the title "Software Architect" is definitely a signal to pay attention to whether this person is even remotely competent and/or produces anything of value. If they give off the impression that they are just supposed to hand off designs to someone else to implement you know you have a complete dud and a moron on your hands.
Personally I find that those who ultimately build the thing they architect are the best to work with. As the build they gain experience, they bridge the gap between theory and practice, and the feedback loop leads to better architecture and better code.
But again, humans are in the mix, so YMMV.
Your comment made me think how any full-time uni professor is -suspicious- of not interacting with the real world. Any -good- professor should be doing research or on the private sector half of his time to not be just a bookworm
I think you're on to something. We ought to hire an architect architect to architect the role of the architect. Maybe we can build an architect factory to abstract that away and have architects set up on demand...
College does not "give" you anything. It never has. All it has to offer is opportunities for you to "take". You get out of college what you explicitly "take" from it. You can class through taking and passing classes, or you can actively search out every possible opportunity, stretch every boundary, suck every bit of marrow from the bone.
Ultimately college can be a time-passing exercise in fruitless make-work. Or it can be the foundation to an amazing career. Only you can determine which it is though, not yhe College itself.
A certified carpenter has more trade-specific information than your average dev out of a great Uni.
It'd be positive if there were some degree of institutionalization of software.
Looking back it's no wonder I am a self-learner now.
For example, in our algorithms course, we needed to implement a lot of small algorithms for various things in Java. (Eg A-star, quicksort, etc). For each algorithm, we were provided a standard API to implement against so they could use automated marking. Well, me and some friends made our own benchmarking harness and web frontend around that api. Before the assignment was due, we would all upload our .class files (and upload test cases), and compete to see who wrote the fastest code.
I think I learned at least as much from doing that as I did from the algorithms course itself.
We didn’t have that much fun in all of our classes. But I cherish a lot of memories from that time in my life. I’m really glad I went to college and wouldn’t trade it for anything.
Obviously the bulk of the class was there to pass, maybe 10% of us pushed the limits, learning the craft beyond the carricilum. We were probably 10 folk or so from a class of over 100.
It was perhaps easier in my day - we had labs with machines no person owned. So you could spend time in the lab beyond the necessary, and the others would be there too.
I imagine today there's less shared working space like that, but hopefully there are still ways to find like-minded souls.
Self learning is great, and we all do that a lot now, but I've been fortunate to find others in my work community who still enjoy sharing, learning, and teaching. Its a bit less lonely that way, and none of us have all the answers.
In my master I had more… and yes there were people who didn't do anything, people who did much more than me, people who were good at writing reports but needed intervention because ultimately they didn't even understand what our project was about.
I asked the professor once to dump a guy, because he said we should meet on a sunday morning to do our assignment, then he showed up 2 hours late, I was almost done with it, and he started by reading the 1st slide of the 1st lecture (with the name of the course, the email of the professor and so on).
This contributed to a junior coder market where people are not ready.
I only found a handful of resources out there which are really preparing everyone for a long journey.
Long gone are the promises of a $500k job after 3 months of studying...
No, they never did. But to stay with the hammer metapher - young carpenters would indeed learn on the job, how to use a hammer and all the other tools. But they would not get the same pay (or even no pay and just food and housing).
In general it used to be way more common, that companies invested in peoples learning, expecting payoff much later. But with high mobility nowdays, they seldom think it is worth it anymore. You teach and then they thank you and move on.
You mean you tell them you will teach them, require them to have the skills to begin with anyways, work them like any other employee but with a fraction of the cost promising them full employment at the end, and at the end thank them and tell them to move on?
(keeping the first person tone of your post)
Second person: You
That's usually called perspective, not tone.
On the other hand young workers usualy greatly overestimate their impact on getting things done and the work required to check their work. (I know I was like that)
On the other hand, those kind of "fake" internships are rampant here in France, specially with smaller companies or startups. From personal experience they don't bother checking their work. And how could they, the other employees are interns too.
It was always just "do your job, don't cause problems".
And for free. Of course. My uni literally bans us from being paid. If we do, they won't acknowledge it as internship.
Could there be any explanation for such a rule, that is not corruption and exploitation? I cannot think of any.
Cynically it feels to me like it's just a nice way for the companies nearby to get free labor.
My assumption for that is just that it's just supposed to be an internship somewhere where our focus would be to study and thus we shouldn't get any benefits from it, but I've never heard of it working that way. It was always in IT here just being an unpaid junior.
The high mobility part is overblown.
The biggest teaching factories are also the ones who spend exorbitant amounts on bureaucracy and accessories while gratuitously taking advantage of young people eager to prove themselves, having little to no responsibilities and no understanding of the professional world. Their whole shtick is to find suckers willing to stick after, all the while taking advantage of naïve youth.
The vast majority of people don't move if you keep their pays on actual market rates. Interviewing is a chore. Moving for jobs is a chore. Most people hate getting out of their comfort zone. Yet, many will push individuals to 'prove themselves' first, having any pay raises lag behind for several years, where individuals find themselves getting their promotion's worth of money only after moving to a different company.
It's the companies that have optimized for this behavior and chosen internal promotions should be few and unrewarding. Not the other way around. God forbid they reap what they sow.
You work part time at a company and go part time to school, combined thats between 35 and 40 hours a week. You don't get paid that much during that time, but if someone pays for your room it's enough.
Without going that route you literally don't get a full paid job.
For a professional MBA that's taken over a department, it's not so much that they won't pay you to learn what's not definitely part of the job but that they can get away without doing so. It appear superficially to be the low risk option.
It's the same reason that manufacturing gets outsourced instead of invested in as a core competency that sets you apart from the competition.
To a lot of people anything that makes the numbers go in the right direction is what's important. They'll even pretend that the sole fiduciary duty is to raise short-term profits at the expense of long term value.
When so many of the world's largest corps are now hollowed out marketing operations reselling generic products, it's hard to argue against using the latest trending framework.
(edit: I think I misread the comment I replied to and am now in the process of maybe figuring that out downthread.)
I frankly still can't tell as that's use of "fallacy" to describe "people picking up frameworks without fundamental understanding" is apparently extremely confusing to me as it isn't in the form of a fallacy--like, is the fallacy that this happens? that this is a problem? is it the thought which leads people to do that? etc.--so I automatically added stuff to the sentence to make it work and maybe I did it wrong.
"If I have seen further, it is by standing on the shoulders of giants."
My real point is that these thing don't require calculus (though calculus does require them). Most people who take trigonometry (or "precalculus" as they usually call it today) couldn't tell you anything about limits let alone derivatives, integrals, and the fundamental theorem of calculus.
As to Newton inventing calculus, he was a vehement antagonist to Leibniz claiming that his work on calculus had been stolen. That's no the attitude of a man who believed calculus was obvious from looking at previous works.
And to those people, the calculator is a magic “black box” that spits out cosines. My original point stands: if you are using a tool professionally you should understand how it works, at least on a basic level. For a calculator, that means calculus, Taylor series, Newton’s method, etc.
If you know the purpose of a trig function, it doesn't matter HOW the answer is calculated so much as that you know the answer is accurate. This doesn't require calculus.
I took calculus. As an engineering major, I actually had real-world applications of calculus across my coursework. How many times have I found calculus essential outside of college? Surprisingly few. Meanwhile, I've found a LOT of use for trig or linear algebra. There are things where the underlying theory is very important, but in my experience, this is not one of them.
Some reasons (based on my experience):
- University classes were either very low level, or using some new framework to increase your employment prospects
- All the experienced devs would hop jobs every few years, leaving less opportunity for mentorship.
- Lack of convenient resources for gaining base knowledge. Googling "how to make a todo list webpage tutorial" will always have articles using the latest web frameworks, for instance.
(Not really anyone's fault, a good engineer has know where to go for the right information. But as a junior without that skill it's easy not to get good information.)
My personal strat when learning a framework is sometimes building what I want without it, running into the common problem patterns, and then looking at how a framework solves it.
It's very time consuming so I only do that for personal projects, but I think I've learned the most base knowledge for really groking a framework doing that.
That colleges aren't teaching this as a first-rate topic is a real failure. This is, in my opinion, the most important skill any engineer should have.
My main driver is Ruby - I have a good feeling about code that can be refactored to use Enumerable more effectively; but I also know that Enumerable offers so much that I might be expecting too much of it. So 80% of the time I point to a method that solves the exact problem and the rest of the time I know how to write it differently.
"Why do you know about filter_map?"
"Because people were confused about reduce and each_with_object and map and maybe you just want to loop through non-nil objects in one pass"
I agree. Especially knowing how to question and how to break problems down. I'm not sure intuition is a thing that can be taught, but it's a thing that emerges as a consequence of being curious and learning how to question and find answers to those questions.
That aspect is also why I think that being generally curious and having a broad base of knowledge makes you a better engineer. It's amazing how often apparently unrelated knowledge can give you an insight into solving programming problems. People who are laser-focused on "computer stuff" specifically often miss important insights.
And like you mention, when a problem arises and you query ur mental rolodex, there’s many more solutions/ideas to iterate over and consider
If you’re interested/havent already read: https://stenzelclinical.com/wp-content/uploads/2021/12/Kahne...
I think students at all levels tend to avoid this, and there isn’t stomach to fail them for it on the academic or family sides.
How to ask the best questions
How to find the answer to such questions
Totally undervalued skills everywhere
I'd be open to allowing smartphones/tablets on all tests so long as there's no internet. Note taking is more important then ever imo, and knowing how to apply things rather than doing he computational machinery in your head is the more valuable skill to spend time developing (not that we shouldn't teach mental computation at all, just de focus it)
Shouldn't hike the prices on the super old TI-89 Titanium unless the screen (and the CPU, and etc.) is really that much more expensive now.