Failing IT education

Damnjan Jovanovic on November 09, 2018

There are many reasons why we can’t say that we have awesome engineers getting out of college. Some reasons are simple, most obvious is: “we don’... [Read Full]
markdown guide
 

I am at university right now and I completely agree. One of my professors would only accept a netbeans directory as a C++ code submission. But how do you start the change?

 

It will be very interesting to hear what do you, or your classmates, think about this? Do you already have some idea how to improve school system? Do you take projects to work on during studying? Did you or your classmates ever ask the teacher to tell you some real-life story or anecdote? I think real life examples are always interesting for students.

 

The CS department is far behind other school's with similar departments. We tried to talk to the adviser/dean because lots of classes here have issues with material (learning legacy materials/wrong approach to problems), but nobody is held responsible so it was really no help. The dean told us to talk to the adviser, and the adviser told us to talk to the dean.

The senior level classes have gotten better in terms of professors, but the high level professors agree that the system needs to change.

The way that I think the classes should be fixed is learning why things work rather than changing languages and taking a deep dive for every single class. My classes right now make you code in a specific language with SUPER specific code standards but I think what makes you better at what you do is figuring out the task at hand and come up with a working solution rather than agonizing over PHP solving a problem that might take a few lines in Node or Go.

 

You start by contributing to open-source projects. Minor fixes are ok but, I really encourage young people to really get involved into the project to the point they are considered maintainers. It will not only teach you how to work in a professional environment but, in most cases, it will teach you things that many companies get wrong (proper use of git and code-review to name one).

 

For sure, I am working on a personal project right now that is still in development. Heres the repo of it if anyone is interested github.com/Squwid/bytegolf

 

I was lucky enough to work as a teacher for a couple of years. In that period I spot this mistakes I mention here, some of my colleagues quite literally had their plan, they stick to it, squeeze what they believe it's important and present it that way. Students, of course, know then how to solve some algorithms from the book but have no idea how to understand a customer.
Solution
Well, what I saw that works for most of the students, that they taking projects in parallel with the studying. That teaches them to understand business, customers, agile and communication, essential skills for the outside world.

 

I finally graduated in 2006, after dropping out for several years then going back.

I tend to agree that college (in the US at least) does not provide you with immediately-useful skills for your first professional job. The work I did was pretty far removed from courses in assembly, prolog/lisp, computer architecture, physics, calculus, world history, english literature, etc. What I really needed to know when I graduated was the company's chosen UI framework, how to organize code, how to write readable code, how to interact professionally with peers and management and customers, etc. College did not really prepare me for any of that. I think group projects are supposed to help with professional interaction, but what they actually teach you is: never trust anyone.

However, as time has gone on I have had occasion to come back to some of those things that I was exposed to at college. I've had to dig into computer architecture to understand multi-threading designs. I've also come back to languages like lisp for examples of how to break down problems into just data which I can process. And in general, looking at problems from the perspective of other disciplines (biology, physics, history, etc.) has help me discover solutions. I guess my point here is that things I learned from a "well-rounded" college education have had long-term value for me. Albeit quite lacking in immediate value. (In fact I hated it at the time for that reason.) And there are some longer-term things I wish it had covered better, such as code quality. But in all, I count it as a worthwhile investment. Although if I had to pay $80k for college, then I might change my mind.

 

Interesting take. I had the exact opposite experience in grad school. I passed out with little to no knowledge of the ever-increasing list of jobs frameworks, or heck even basic web technologies.

My courses were all basic Makefile submissions, and courses were exclusively fundamental CS concepts over any shiny project.

 

Hit the nail on the head with this! Most formal education leaves students unprepared for the realities of work. Informal education(camps, courses) are no better at this, but at least they don't cost as much.

Hopefully we find a good solution for this before we fail many more generations of learners...

 

Thanks for the positive feedback :)
Well, I believe we getting better, but I still complain that we are not fast enough. Someone already mentioned in the comments that there is no uni book that he knows which put testing as a necessary skill for the software developer, but industry definitely has a high demand for this and many other skills which uni. do not provide.

 

In all the CS/CL books I bought I never found a "test" chapters.

If writing tests is not in the most basic material, then I hardly see how we can blame code writers.

 

That's exactly what scares me the most. 2018 and we still consider testing as a "nice to have", "plus" or "good to know" at job interviews. I don't understand why it is not obligatory knowledge at the university. Architects learn how to calculate and prove that their buildings will stay, there are simple formulas for every part of the building and if you put measures in them, you'll get the answers, forces, momentums, etc. put all those units together and you'll get a binary answer, can building stays or not. I don't get it why software engineers should not do the same.

 

What an awesome article 😍😍😍 can I translate it to Portuguese?

 

Thank you so much on such a positive feedback 😊
Off course, feel free to translate it and republish in Portuguese :)
Out of curiosity, did you worked as a teacher, or you found this article true by studying IT?

 

I've worked as teacher and I agree with all what you said. In my country the study guide is given by the company that hires you to lecture... And we must follow it. And yes I found this article true by studying IT because I've realized that sometimes we are studying what we won't cover / need / use in our daily work.

Thanks for the permission!!!

 

I think this describes most of the world school systems and fields. The way we learn is outdated and useless.

 

I agree, but IT and CS are even more prone to deprecation problem regarding the fact that everything evolves so fast, that you can't write a book so fast to cover new technology, in meantime, it can become deprecated.
But that's exactly what universities doing:

  1. They pick up current discoveries and modern set of technology.
  2. Professor takes time and writes learning material, book or scripts.
  3. A couple of years afterward professor established his lessons, and he will stick to that in next 10 years since changes are not what they like to do.
  4. In the next ~5 years, the material is already deprecated since it sticks to concrete language and technology
  5. you got engineers which knows some deprecated technology stack

I personally believe that professors should focus their lessons on problem-solving, agile acting, design principles, testing etc. Then they can use any "current" language in classes to demonstrate that.

 

Lots of the skills and knowledge that recent grads lack is also the stuff that barely changes at all.

Some examples include business analysis, requirements gathering, basic stats, ethics, professionalism, code quality, code maintainability, leadership, management, testing, security principles, communication, etc.

I'm putting the finishing touches on a blog post with over 30 books that every programmer should read and lots of those book at 20ish years old. And the oldest book on the list is 52 years old!

The universities and colleges could do some much better.

 

I am in university right now to become a computer engineer. My uni is specialised in hardware. We have some coding classes, the main language is C++ with some class in Python (AI and data science). It really depends on the prof; my data structure class was with a terrible prof that was just plain garbage. My current OOP teacher (for monetary reason they wouldn'T credit that class) is a top of the league C++ programmer that covers a lot of stuff, only accepts the best and gives extra points for efforts.

But of course, this is just uni/college. They teach you basic, the difference between what you learn in school and as a professional is insane. College/uni is like a game: you have to play by the rules to obtain the paper to have profesionnal consideration in the public and private sectors.

You have to learn things on the side to truly acquire much needed skills. I am just very disappointed that most schools won't teach you code versionning, tests, doc reading, basic sysadmin tools, etc.

 

The Information Technology is not easy as the student when start with 123 helpme and go to the state of mind. The IT Education diamond your Hard work and flow of the work in the days before exams.

 

if I am within the scope of the education system, I am as a student, what should I do so that I can become great? Am I out of education?

 

Well, it is a good question, especially because a lot of students recognized that the education system won't help them 100% on their journey from college to the first job. Of course, we should never expect to have senior engineers right from university, but it is fair to expect that you can easily jump into your first company and find yourself comfortable, without so many surprises.
What I would suggest is:

  1. Try to make any project for any client. It might be a website for your cousins business or mobile app for your friend, does not really matter. Any kind of project, you do for someone else will eventually cause communication between them (client) and you (developer).
    • That way you can learn agile = they will ask for changes
    • You can learn how to communicate with people = being able to understand the requirements
    • Define what they want = being able to write documentation
  2. Get into testing as soon as possible. Try to make good habit of always test what you just make, automate those tests, make them fast and reliable. Unit tests are great, but you'll also need integration as well.
  3. Read, watch. There are tons of materials including this website (dev.to) which provides you with a lot of material for learning outside of school.
code of conduct - report abuse