DEV Community

Cover image for Failing IT education
Damnjan Jovanovic
Damnjan Jovanovic

Posted on • Updated on • Originally published at linkedin.com

Failing IT education

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’t teach them the right things”!
But there is also lack of real-life practice during studies, lack of teamwork and collaboration and of course setting wrong goals in front of students. It might sound depressing but we basically produce machines for code typing. If you don't agree, then put it this way, how many students you know that can think and act agile, understand importance and priorities, understand business at all?

Learn to learn the right things

First thing first, what essential thing we forgot to teach our students? We forgot to teach them things which last for long and not be obsolete as quick as many things in IT. You might be noticed that developers struggle to have knowledge in cool trendy topics, know latest releases of frameworks, experiment with new databases and languages but they are stuck if you ask them to list you 5 SOLID principles. Nowadays especially education institutions having a race to follow up with the latest technology, to offer courses in a latest cool languages, but at the same time make little effort to ensure that future engineers know about industry standards, discipline, and professional behavior.

Programming is not a military, but lack of discipline starts to cost way too much. Newcomers used to write a code without any tests, nobody ever asks them to do so. The only thing everybody asks them is to make the software work and do it fast! Discipline is considered as a second, third or fourth place in the desired skills list. Being able to: 1. code fast, 2. make things work and 3. working longer, is usually three things employer wants from developers, and education institutions are very successful in delivering this values.

Evaluation problem

How they enforce this values over students? Well, they first squeeze tons of things they think you have to learn on course. They ensure it is almost impossible to learn all this stuff with any quality. It is more look like you know a lot of things, there is a pile of terms which ring you a bell, but unfortunately, you have very little understanding of what is going on there. That’s why developers are fast, but they don’t follow any pattern, they don’t have any structure, just a pile of code.

There is also a problem with a higher or lower grade on college or course (A, B, C, D, E or 1 to 10 depending on school system). Just because you got the highest grade in the subject of some programming language does not mean that you are on top of the world for that language knowledge. Also, students have to keep in mind that without practice, their grade is worth zero in real life. You could ask why? Why then colleges have appraisals at all? Well, educational institutions use grade to compare your knowledge to some percentage or scale of teaching material they decide is good for you. I personally believe that grading students is harmful and produce unhealthy competing atmosphere instead of enforcing teamwork which is much closer to how real life will look like.

Is there a life after tests?

One interesting thing happening during the educational process and that’s evaluation period. Usually, there is time reserved for listening to what one teacher or group of teachers have to say. After you listen to all the material you have to go to the exam and prove that you did understand things and you can apply it to some examples. In most of the cases, students know what the teacher wants to see on the exam, so they can train themselves to pass the test. ! TRAP! If you didn’t notice so far, education institutions training people to pass the tests, they not give them the ability to apply new learnings it in the real world.
There is many students keep asking the same questions, is there a life after the test? The answer comes as a relief, usually right after successfully passing the test, students can even more successfully erase their short-term memory and free it for the next exam and repeat.

That leads to answer why TDD is so poorly applied in practice. Students were trained that they learn something, teacher tests them once and then they are free to forget. They are doing the same as a developer. They do a work, test it once, if it passes their observations they ship it to QA. QA usually find something, bug or unexpected behavior, not covered edge case etc, and return code back to the developer to redo it. Note the pattern you saw at college, students do something, pass it to the professor who then evaluates and return it back to the student if it’s not sufficient, or approves it. Basically, developers are not trained to take care of their testing and testing results.

When it comes to unit tests, there is also an interesting parallel with education. Developers like to “debug” a code, run it under different circumstances and observe the result of some variables in debug mode. Instead, they never actually wrote a test for something they expect and then run code against it. Why so? Because they don’t expect. Simple as that, they don’t know what to expect, because if you have to assume something you have to learn how it works. If you don’t understand how it works, then you will try it until it returns your desired outcome. Interesting enough, developers discovered that tactics from school. There, they had two variants of how to approach material, for example, math. They can learn meanings, deeply understand equations, and be able to apply them to any given problem. Or they could try numbers on the exam until it fits the desired outcome.

Conclusion

And this is still just brief overall why and where we failing to educate good IT engineers. It's also a depressing fact, that at the moment, that industry didn’t recognize urgency for change and didn’t create pressure on IT education institutions to change. Instead, it seems like they remain blind to this problems and keep going the way it looks easier for industry and commercial enough for education.

Discussion (28)

Collapse
bwhitelaw24 profile image
Ben W

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?

Collapse
damnjan profile image
Damnjan Jovanovic Author

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.

Collapse
bwhitelaw24 profile image
Ben W • Edited on

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.

Collapse
damnjan profile image
Damnjan Jovanovic Author

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.

Collapse
ultracuck profile image
Eniz Vukovic

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).

Collapse
bwhitelaw24 profile image
Ben W

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

Collapse
kspeakman profile image
Kasey Speakman • Edited on

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.

Collapse
damnjan profile image
Damnjan Jovanovic Author

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.

Collapse
tasmacncheese profile image
Aditya

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.

Collapse
josephinemurd13 profile image
JosephineMurdoch • Edited on

IT education now determines a lot. And the main criterion for success is the development of technology. I am developing startups in the field of gambling. And as an example of technology, I will give Japan. The main development criterion is the right investment. I will quote the investors:"パチンコ おすすめは開発のチャンスですので、お勧めします。". Thank you very much for the article.

Collapse
nebojsac profile image
Nick Cinger

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...

Collapse
damnjan profile image
Damnjan Jovanovic Author

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.

Collapse
jacob2109 profile image
Jacob2109

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.

Collapse
limbojohnes profile image
LimboJohnes

A very cool article, I completely agree with you, my nephew recently found an excellent university in Germany and plans to go see how they study there, he decided to get an IT education there, in this university mygermanuniversity.com/ he wants to learn how to code what you think in how good is this university?

Collapse
shepherd2761 profile image
Shepherd2761

No doubt number of students cannot pass IT exams, but its not their fault. The reason behind this is lack of teamwork, collaboration and most important is setting of wrong goal. The graduateway.com/i-wish-i-had-a-mag... best way to stop this is taking the right decision while choosing a degree.

Collapse
bgadrian profile image
Adrian B.G.

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

Collapse
damnjan profile image
Damnjan Jovanovic Author

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.

Collapse
bosepchuk profile image
Blaine Osepchuk

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.

Collapse
j_mplourde profile image
Jean-Michel Plourde

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.

Collapse
olimpioadolfo profile image
Olimpio

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

Collapse
damnjan profile image
Damnjan Jovanovic Author

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?

Collapse
olimpioadolfo profile image
Olimpio • Edited on

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!!!

Collapse
rifaimartin profile image
Rifai Martin

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?

Collapse
damnjan profile image
Damnjan Jovanovic Author

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.
Collapse
sjdhyani86 profile image
SJ Dhyani

i totally agreed with you. the time when they will recognize. it will be too late.
Nice way to take this matter in to light. Thanks