Share On Twitter Facebook Google+ LinkedIn Pinterest Tumblr Reddit

As a programmer, do you think beginners are getting obsessed with data structures and algorithms?

Tags: Algorithms Data Structures
Question Id:50

When I began coding back in 2013, I wasn’t obsessed with data structures and it turned out fine, but just fine, not exceptional!. I however realized over time that I had to learn data structures and algorithms as these are the core concepts in computer science that helps one understand what is really going on behind your code. Learning this has significantly improved my coding skills, plus you also learn how to solve and optimize coding problems better.

It may seem as though beginners are getting obsessed with data structures and algorithms, but it’s funny how the majority of new programmers aren’t. This is due to the latest trends and implementations in programming and how they’ve covered the need to have an in-depth knowledge of data structures and algorithms.

Today, you can easily learn any framework or language because more experienced programmers have implemented layers upon layers on the core concepts of computing, removing the need to obsess about data structures and algorithms and have made the learning curve smooth.

i.e Today you can build a fully functional website or mobile application without having in depth knowledge of data structures and algorithms. You’d need to know arrays, lists and other datatypes but nothing too deep.

This is not to say the study of these core concepts aren’t important.

Many developers today are self-taught, and most start out with inner questions like:

“How do i build a website or mobile app”

“I want a mobile app for xxxx idea”

These days, programming beginners are more focused on the shining technologies. “Social media programmers” and bloggers flaunt various technologies and tutorials of how they’re used. This is not a bad thing but it’s becoming more and more distracting and make beginners jump right into learning these frameworks.

I am guilty of this. When I began coding, I was straight to jump into the technologies and latest frameworks. I learnt a lot this way and also learnt how to solve different problems, but it’s not enough.

Programming is thinking not typing.


Knowledge of Data Structures and Algorithms would improve your thought process to writing better code.


Wasn't Wirth's book literally titled something like “Algorithms + Data Structures = Programs"?

There was a lot of foundational work in the 1970s and 1980s that couldn't come to fruition because we didn't have the hardware yet. That seems true in a number of aspects of system design.

So I don't necessarily consider it a problem that composability and non-programmer application development are fashions on the rise. Democratization of compute resources has generally improved the human condition.

It does seem true, however that some people become so captivated by certain development frameworks that they become blinded to their “all the world's a nail" affliction. I have seen this the most in younger programmers earlier in their careers.

I think that with some combination of experience and theory, one becomes appreciative but less inclined to cultlike adoration of a framework or language.

I believe that no matter one's engineering discipline, the mantra/question “What are you trying to accomplish? is a core necessity.

Sometimes “just because you can, doesn't mean you should.” An example is RPA (robotic process automation). Yes, you might save hours a day of some data entry person's time, but if you're using RPA instead of doing the actual work of enterprise application integration and message architecture, you might we'll be accruing technical debt with each passing day.

I think we don't do enough post-mortems when things get replaced. PHP and Phonegap (Cordova now?) will be first against the wall when the cybersecurity war crimes trials come, so it would save future generations some risk if we developed better cognitive frameworks for integrating these lessons learned rather than slavishly rushing to whatever the new framework hotness (TM) is.


I think that your illustration perfectly illustrates (duh) a failure, which is to think only in these terms.

First of all, beyond fairly simple algorithms and data structures, most developers will spend 99% of their time dealing with ‘process’. Frameworks won’t help with this (most hurt) and knowing all the algos in the universe won’t make you good at it.

Process is king. It is the hardest thing to master, and the one that will make you stand out and move to the highest ranks. Its one thing to be able to write some slick code, but you won’t get very many chances at that. It is fine to know some frameworks and understand them, that can be useful. But if you know how to master process you can multiply the effectiveness of entire teams by a large margin. That is what will build a career.


The thing is, I can't really tell where I am.

I know more or less what happens with what I type, I solve many unique problems by myself, know about how OSs work and I know some graph algorithms, optimisation and stuff.

I just don't know what that is compared to computer experts.

And all it really helped with so far is with using modern technologies and maybe some old school stuff, just better. I don't know how to make things from absolute scratch.


While knowing algorithms and data structures is very good to you, at least some jobs require it mostly on the interviews. What really matters in those jobs is code cleanliness and maintainability, discipline, execution, delivery in time, reading other’s code, finding and fixing bugs etc.


LOL. I was a “coder” by name. That meant I got the job done with the Least Instruction to accomplish the Result.


Back in 1966 in the Pentagon. I wrote my first CARDS in and Out and Printer Only. To handle the Force Strengths in the US and Continental Commands of the US Army. IT and IS matured to Tape in/out. Later at Universities, Fortune 500’s and all Government Disk in/out, Monitors. So my poor writing skills could be copied just like Routines, Programs and code.


I always like relating and communicating with Machines. They don’t lie or lay like people. Real strange behavior among humans. I know and found my place.


Language is just like speaking: In German, French, English or East Indian.


Logic on the other hand has 3 simple constructs. Sequence, Condition and Branch and Return or repetition. Only structures I needed, later Systems, Data, Manual or Machine Processes too and networks do that Too. What else can you do with any Programming Language. Of course there are the higher level languages. Mark V, RPG, etc. I once found I could writ a program to convert Data from one system to another. With 5 logical instructions in COBOL. Using a Table Entry of the Length and Positions of the Data Mapping of From to TO. Never got paid to make a Table Entry for any algorithm. But I was interested.


It is not a NAME GAME of Politics or Sell Job in an office. Just don’t try to eliminate them they are people. Get the job done 1st and make it Pretty Later. Speaking to the name game does not work either. Yet Practice makes perfect. Classes are great because they can be performed, executed, because they are fully tested with the same results every time. Whether the code is imbedded or performed externally.


But then that is how I code. One piece at a time tested and verified. A small test of a function or 2 allow all the Context: User, System, Data, links to be tested in the start, ASAP. This interaction can be more important than the code. While you were developing other routines and code as time management allowed you to accomplish. Do what you know and have available right away and fill in the blanks. Like a System and not just a program or Project within the Purpose, Scope, Context with Change Management. So you notify immediately if cost, purpose, scope and context change to those who are effected by Project, System, Data, and process changes manual or automated.


So language to me is secondary and always has been. Like a flow chart Warrnier-Orr allows you to lay out the structure Algorithms before you code. Ironic I see no different with System Design, Project Management and Process Analysis manual or Machine Language. Computer make process steps in the right order of need of Results. Wh Warier Ord lays out the issue Top to Bottom. Allows for additions and changes to the Algorithm of the Purpose, Scope, Data, Systems context.


Once you practice you don’t need Warnier-Orr structures or Algorithms. It is just reality. You don’t need flow charts. It does not hurt to know how to do a flow chart and not a bad way to layout logic. But that is a program too. You cannot balance a bank account w/o getting the needed data 1st. Warnier Orr was good to place logic of a program, data, system in the right place and where to add the changes if necessary. but programmers learn to see that in the simple structure of coding anyway in time. No need to chart it.


Remind me of bottom up problem solving. Once you know the answer you can make the Perfect Process manual or machine. Reuse of code is what C++ and .Net try to create by forcing compliance that restrict for commonality. Like a Database does vs. real data files for a specific need that flat files could do anyway for any specific need. Without common needs.


That is reality. No different than a space flight or trip to the moon. You repeat what has worked with the perfect logic without repetition or duplication of effort and code. Depending on the need, speed and understanding. You don’t re-invent the wheel. You use it. When I was a contractor and there was a Paid Expert on board. I used that expertise that was already paid by the company. Other programmer Analyst would Howled like Cayote’s. Me I got the job done and out the door to the next Job or contract. Why I made the highest pay and did the most projects. And no one wanted me around as a permanent employee. I got paid more and left to fulfill the greatest needs most companies did not want to pay.


I learned Autocoder, Assembly, Cobol, PL/1, Basic, RPG,C,. C+, Script Language and the list goes on be it a Mainframe, IBM, CDC, Mini Computer or a PC. Constructs of Language are but a simple reference of the Language specs.


The Result is important most of all. How you get there is secondary, but to use the Mind and repeat you always become perfect over time or the first time. Practice makes perfect in all we do.


The mind need to be use be repetitive. Otherwise it looses what it knows. Dumping the brain, brain dump for the next GIG. Of course it it comes bank with repeated use faster than the 1st time. But carry a database does that w/o re-figuring.


Sorry I did this for 50 years. Principle Consultant the Last 40 years of 50. If you can program you can do it all. It does not work that way from the Top to the Bottom. But I have seen that on occasion. The Comptroller using Mark 4 because he could do it faster than IT Department. He just lost track of his Comptroller responsibilities. Had to stop coding, even in Mar VI.


I taught myself programming in C (back in the dark ages). I have a reasonable understanding of what lies under the hood but I couldn’t write a sort algorithm to save my life.


It hasn’t stopped me having a fulfilling career. Programming needs us journeymen. We are happy to sit at the feet of Leonardo and paint in the cherubs while he does the main portrait.

Your Answer

Review Your Answer