Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I think having separate Software Engineering and Computer Science tracks would probably help the situation. The SE track still covers some "good to knows", like data structures and algorithms and hardware basics, but emphasizes the use of modern tools to build software. Preferably, it requires an end-of-year project each year with the projects gradually becoming more difficult.

Meanwhile, the CS track leads to grad school and a research career.



So then you can go to grad school and statistically get a low paying job as an adjunct part time professor and have more debt....


If two tracks were available, I think you'd see a large reduction in the number of CS students. The ones who did go the CS route would be the ones who had no interest in commercial software development.

The SE route would insure that graduating students have experience in modern tools and techniques.


SE is fluff, students need to learn the hard stuff and learn practical skills on their own. Students are hired based on theoretical knowledge and basic coding ability anyways, not practical skills.

I sat in several classes learning about the development lifecycle and it was a waste of time and money. A class where students sat on LeetCode would be much more productive and lead to better jobs.


And this is what we call HN Silicon Valley thinking. The average corporate job doesn’t care about “the hard stuff” and “theoretical coding skills”. They are going to bypass the person who knows theory and hire someone with practical skills that can hit the ground running.

Why waste money hiring you when they can hire a recent immigrant or a boot camp grad who did learn practical skills for the same amount of money - and no that’s not meant to be an insult.

When I just need to hire someone to whip out a few pages in React + [c#/WebAPI || Node+Express || Python + Django], I don’t care about your leetCode abilities.

I have never in my life said “Thank God we hired someone who can reverse a binary tree on the whiteboard”.


Bootcamp grads aren't going to be able to answer my interview questions. If you can't invert a binary tree, you won't make it to the onsites, let alone pass an interview.

I don't think the average CS grad can actually code and I don't want to hire them either.


Well fortunately, unless you are interviewing for one of five or six tech companies. Your company is not that special and probably not paying more than average.

No I’m not going to spend months studying leetCode and reading “Cracking the Code” instead of just calling my carefully curated network of contacts that are itching to either hire me (former managers who have moved on to other companies) or refer me.

I’m no special snowflake. Anyone with 10+ years of experience, a decent network, can competently talk about architecture, and who knows how to answer soft skill questions can have multiple offers quickly.

To be blunt, there are more of you - companies looking to pay quite well for seasoned software engineers/architects with practical skills than there are of me - people who have those skills. Statistically, I can find a job a lot more quickly that pays well than you could find someone who has practical experience and who is looking for a job.


I work at one of those five or six companies but even companies outside of FAANG in SFBA, SEA, and NYC ask these questions. 10 YOE at FAANG can get you in the ballpark of 500K TC, you aren't getting that at random companies and your experience at random companies will not be valued by FAANG.


I’m also not getting my 5 bedroom 3.5 bath 3000 square foot house in the burbs with a great school system for $350K. So there is that.....

Besides I know from all of the recruiters contacting me from FB and a friends experience, if you learn enough “leetCode” they don’t care what company you come from. They are hiring kids straight from college.

But as soon as they said it requires relocation to the west coast I deleted it.

Now on the other hand, Amazon hires AWS SA’s, TAM’s, etc without requiring relocation as long as you can travel frequently.


Even with the most theoretical CS degree you should still be qualified to get an entry level programming job. Maybe not at FAANG, but theres enough demand for programmers out there that having any related degree is often considered good enough for a highly underpaid junior position that can grow to normal salary after switching companies 2-3 times.


The demand for entry level programmers is often overstated. Many companies don't want to hire developers who have no previous experience, that they have to train on their stack. A junior programmer is often a net negative to team.

And you just kind of made the point, why hire a junior developer who you have to train and will leave right when they become useful? For just a little more money you can hire someone with 2-3 years of experience or at least someone who came from a boot camp who at least knows the stack you are using.


> you have to train and will leave right when they become useful?

so pay them more as they become useful. They leave because now that their skills are up, the junior salary is no longer commensurate with their skill level.

I bet if they were paid the same as if they jumped jobs, they would not leave.


I agree completely. I have no idea why companies don’t do that.


Software Engineering has nothing to do with "modern tools."

Data structures and algorithms are absolutely essential to software engineering, which itself is just a buzzword for applying known and repeatable methodologies to writing software. Every single "software engineering" concept outside of maybe QA / testing is already a subset of a modern computer science curriculum.

"Modern tools" is specious. Does it make sense for a student to use git or JUnit or Vagrant or Node to get their work done?

Sure.

Should a professor spend any time covering these things in class?

Hell no.

Any student who is unable to figure these things out on their own is going to be unemployable when they graduate anyway. A prof should give them directions to the documentation, and that's it.


"Any student who is unable..." this is a sink or swim mentality that is just wrong imo and doesn't account for students' workload. Most everyone who started out had difficulty understanding software tools and the paradigm they operated in, and college students taking 4+ courses have 4x the material, not to mention the ramp up of 4x the tools to use, documentation to read, etc. If you're going to throw 40+ hours a week of course work, and then the responsibility of learning git, gdb, python, LaTex, fundamentals of the Linux terminal, etc without extra time or assistance, then most likely you're going to have a lot of pragmatic young people throw their hands up and say, "forget it, I'm gonna study business/physics/x engineering" instead


Do you realize how many new programmers struggle with simply adding Python to their path? That simple concept is beyond most engineering students and can literally cost them days in research. It's easy to forget where we started.


If a person can't figure out how to use google to find out what they need to know and they don't have the social capacity to ask their fellow classmates then I don't ever want to work with that individual, and neither does anyone else.


So they are going to ask their classmates who are also college students without any real world work experience about which tools they should learn? If they are just going to teach themselves bad habits from Googling, what’s the use of college?

How many example websites are out there about how to use sql in programs have:

  sql = “select * from User where firstname = ‘“ + firstname + “‘“;
And it was just posted today about people committing their AWS credentials. Mostly because every AWS example has

  client = S3Client(secretkey,accesskey,”us-east-1”)


College is for educations. It's not a vo-tech academy. Also, you're running away from the discussion. The issue is about students becoming unhireable upon graduation. An associate level developer will be able to fix the issues with a junior level developer who would use that sql statement and AWS credentials, and frankly, being able to crank out that sql statement is far beyond what the average graduate can do to begin with.


Do you really think that the average American family is getting thousands of dollars of debt for college for any other reason than helping their kids get a job?

I was responding to the idea of just “googling for the answer”. In both of the situations above, the student would search for the answer and get back an example that was insecure, but how would they know that? In the first case, the sql statement is a prime target for a sql injection attack where they should have used parameters and in the second case, they should have not included their credentials in their code at all and configured their local box to store credentials in their user directory and used a role on AWS.

And you wonder why not only can’t Johnnie do FizzBuzz, but why in 2019 developers are writing insecure applications.

But why would I as a hiring manager (I’m a reformed dev lead), hire a junior developer who just knows theory and will spend the first six months to a year doing “negative work” when I could pay the boot camp grad or the recent immigrant who was focused on learning useful skills a few thousand more?


YMMV, but with my college education I've been able to work on critical upgrades for our networking infrastructure, write a code-generation tool which automated a substantial library migration, and diagnose/solve difficult bugs which come up late in the release cycle or in production. I take on tasks/projects which would usually require multiple offshore developers. Additionally, I spend nontrivial amounts of time fixing issues in our development environments that are caused by our offshore team. I end up taking on responsibility that no one else can, or perhaps wants to. On average, college graduates require a greater ramp up, but also have a more solid foundation and higher skill/impact ceiling.

Before landing at my current job, I was passed on by lots of tech companies because I was good at theory and bad at interviewing/coding.


Some people are slow starters for various reasons, often lack of confidence. As long as I see some interest in becoming better, I'll gladly mentor.


There's a difference between a slow starter, or someone who lacks confidence, and someone unwilling to put forth the effort to learn something because his professor didn't put him in a high chair and spoon feed it to him.


I'm a slow starter :) 20 million have watched me online and growing everyday. I struggled with the simplest of stuff but excelled beyond some of the most educated in my tortoise type way. I paid more in taxes last year than most people make.


The most overrated thing in the history of history is the workload of a college student. Nobody is asking any of them to be experts with using certain tools, but they should certainly be able to figure out how to use them without being spoonfed in class. Given that plenty of tools are used in multiple classes, and the assertion that students don't have enough time to figure out how their own tools work becomes even more invalid than it already impossibly is.


You're dramatizing other people's statements quite a bit. Nobody is saying that the use of Git should be the subject of lectures, unless you're using Git's source code or software design to exemplify some technical points. But grade based on projects and require the use of these tools - e.g. Git, GitHub, Maven, and Python - to work on them. Then, as a teacher, you should know how to use them yourself because you SHOULD use them in your own development. (Even if you're doing research you should use a version control system. VCS's are practically designed for the scientific method.)

Again, let's keep in mind the premise: CS and SE are separate departments in a uni. Professors who gravitate more toward forwarding computational science are in CS; professors who gravitate more toward the science of building software systems are in SE. I posit that such a division would put people where they belong and make people going for SE better prepared.


Software Engineering has to do with designing and building information-based applications that do something useful for people. As such, SE students should be fluent in versioning and build tools, frameworks, languages such as Rust, Python, and Elixir by the time they graduate. They'll need to know about distributed systems and how to work with different data stores. Security, security, security...They shouldn't learn how to write secure software on the fly.

Data structures and algorithms are absolutely critical tools in the box. Should an SE student know the space and time complexity of them and what that means? Sure. Should every student spend time creating their own linked list, binary tree, hash map, or binary search algorithm? No. There is a value on the theoretical side of the house in knowing how to do it. But, data structures and algorithms used in the field are well-known and understood. Students should know when to choose what.

While taking quizzes and exams may have some value in reinforcement learning, SE grades should be based on projects. The projects should grow in complexity over the course of their college careers. By their senior year, they should be able to cost out a project for time and materials. The projects should become a portfolio for them when they graduate.

All of this assumes that the professors have some clue about building software. The professors would need to actively build software with modern tools.

The professors from my grad program were brilliant people who understood many foundational concepts. They expanded my mind greatly, which is what I went into a grad CS program for. Very few could build software though.

Students have so many conflicting deadlines that they aren't encouraged to experiment with tools they'll need to build software. They go with the quickest means to an end. A solid program in SE would give them the time and guidance.


Project estimation has jack squat to do with software engineering. That is a business problem, not a software engineering problem. A bachelor's degree is about learning the fundamentals of the discipline, not about learning to play with ancillary tools which will be obsolete in 4 years.


An SE is part of the "business". Often an organization has many projects that need to be done, so time estimates are critical to determine when the next project can start. It's an important skill to have.

You're not "playing" with tools. You're learning to use them to build stuff of value to someone. And that's the point: SE majors should work on real world projects using modern tools.

My contention is that SE should be a separate academic department from CS in the same way the EE is separate from Math and Physics. CS professors would continue to teach CS and very definitely not SE.


And this is the problem with junior developers. We are not paid to “write software” we are paid to solve business problems. Any software that I can avoid writing by using an off the shelf solution and let other people do the “undifferentiated heavy lifting” is a win.


Then what’s the use of the professor if all they do is tell people to RTFM?


Should a professor spend half his allotted class time teaching a student to learn a programming language and then another two weeks on git? Why? Is the student's time better spent getting spoonfed he can learn on his own, or getting education from an expert on things that are actually difficult to learn from a book?


If you think that programming is “easy” for everyone to learn from a book, you’re so far out of touch I don’t know where to start.

Yes most graduation students are going to be programming and not “inverting binary search trees”.




Consider applying for YC's Winter 2026 batch! Applications are open till Nov 10

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: