'Top Programming Skills' List Shows Employers Want SQL (dice.com) 108
Former Slashdot contributor Nick Kolakowski is now a senior editor at Dice Insights, where he's just published a list of the top programming skills employers were looking for during the last 30 days.
If you're a software developer on the hunt for a new gig (or you're merely curious about what programming skills employers are looking for these days), one thing is clear: employers really, really, really want technologists who know how to build, maintain, and scale everything database- (and data-) related.
We've come to that conclusion after analyzing data about programming skills from Burning Glass, which collects and organizes millions of job postings from across the country.
The biggest takeaway? "When it comes to programming skills, employers are hungriest for SQL." Here's their ranking of the top most in-demand skills:
If you're a software developer on the hunt for a new gig (or you're merely curious about what programming skills employers are looking for these days), one thing is clear: employers really, really, really want technologists who know how to build, maintain, and scale everything database- (and data-) related.
We've come to that conclusion after analyzing data about programming skills from Burning Glass, which collects and organizes millions of job postings from across the country.
The biggest takeaway? "When it comes to programming skills, employers are hungriest for SQL." Here's their ranking of the top most in-demand skills:
- SQL
- Java
- "Software development"
- "Software engineering"
- Python
- JavaScript
- Linux
- Oracle
- C#
- Git
The list actually includes the top 18 programming skills, but besides languages like C++ and .NET, it also includes more generalized skills like "Agile development," "debugging," and "Unix."
But Nick concludes that "As a developer, if you've mastered database and data-analytics skills, that makes you insanely valuable to a whole range of companies out there."
what the query (Score:4, Informative)
Don't be like my old boss! He made a query that spent 15 SECONDS in the query engine figuring out what to do before the query which took 3 seconds to perform. Don't try to do everything in one query. I broke it into 4 parts and wrote an aggregater in about 20 lines of php for a total runtime of 6 seconds with much prettier results. Sheesh, kids these days...
Re: (Score:2)
Re: (Score:2)
Probably because they're stuck on MS SQL Server and have to say GO GO GO after every line of SQL and they get discouraged and just write a bunch of shitty PHP to do the same thing.
Re: (Score:2)
MS SQL Server and have to say GO
That hasn't been true for ages.
Re: (Score:2)
Probably because they're stuck on MS SQL Server and have to say GO GO GO after every line of SQL and they get discouraged and just write a bunch of shitty PHP to do the same thing.
Huh? I haven't the slightest clue what you are talking about. I've written thousands upon thousands of lines of SQL and I almost never use GO. I believe the only case I've used it...When bulk running code manually from a .sql file, I believe (if my memory is correct) that if you try to run a block with create table statement first, and then query that table, it will throw an error on the queries saying the table doesn't exist. Throwing a go in between makes it work.
With certain other things, like when us
Re: (Score:2)
GO
is used in the interactive command line environment and means to submit the previous content to the server and execute it. In other words, when an interactive user types characters, those characters are accumulated into a string which continues to grow (on the client side) until the user types GO which causes the accumulation to be submitted to the server for execution.
The same is used for the using redirected input from a file (which is merely character at a time input from a file rather than the keyboa
Re: (Score:2)
find one able to interpret or even run a query plan
Holy fuck this rings so damn true. However, it isn't just the new kids that have issues. I've seen so many programmers of different walks looks at a plan and not have one clue as to where to optimize it. I'm just floored by the number of people who have no clue how to look at a plan and point to the spot on that plan that needs the most help. Old COBOL guy the other day where I work was using Visual Explain for an IBM i query he was running in an ILE service. It might as well have been Sanskrit because
Re: (Score:1)
Re:what the query (Score:5, Insightful)
He made a query that spent 15 SECONDS in the query engine figuring out what to do before the query which took 3 seconds to perform.
Yeah, that's why smarter RDBMS' need to do the first part only once.
for a total runtime of 6 seconds
So you've made it worse?
Re: (Score:2)
So you've made it worse?
No.
It's like your score in golf, the goal is to make it take less time.
6 is less than 15+3
Re:what the query (Score:4, Informative)
Re: (Score:2)
Until one of the user settings stored in a bunch of DB tables changes on you, and your query is now using old parameters and preference options.
At that point you might as well remove the parameters completely, and hard code all the options as permanent.
Just tell the users that "changing the 'active users' drop down menu to 'inactive' won't change the report because I hard coded 'active=true'
Re: (Score:2)
Re: (Score:2)
PHP sql query: 15 + 3 = 18 seconds.
PHP sql queries plus aggregator: 6 seconds
Original SQL compiled as a stored proc (or even just a normal query compiled first time and then cached): 3 seconds.
I imagine he could have put those 4 queries into a stored proc and the runtime would have been 1 second, DBs being very good at aggregating result sets, and also only transferring the final result set saving network bandwidth too.
Re: (Score:3)
Re: (Score:2)
Which is just showing your ignorance, the 15 seconds happens ONCE, on FIRST execution of the script. After that ALL subsequent runs will take 3 seconds
Why would you even think that?
Just because "active" has a "1" for user "bob" right this very second, doesn't mean that will never change at any point after writing this query.
You absolutely need to look up the value for "active" on user bob each time you run the query to ensure you give the proper results.
You never hard code parameters that others can and do change, unless this is a query to only ever run manually by hand. The fact PHP is involved to fetch those parameter values from other tables shows the
Re: (Score:3)
Re: (Score:2)
No I never argued against a stored procedure containing the multiple queries, actually that's what I would have done and completely skipped involving PHP in the first place.
But unless parent is using their terms wrong I'm confident that is the very type of usage they are talking about.
My example was probably far from ideal, but those types of things I see all the time.
Key/value pairs scattered around different tables that need to become part of your limiting set, thus become part of some monster join (or wo
Re: (Score:2)
What are prepared statements?
Re: (Score:2)
That what inner joins are for. Although technically you are hard coding the "active" value, but I digress.
The PHP in getting all the 0, 1, 2 etc. from all the status / postal code / blah tables to finally include in the main query is hitting the database multiple times, using network traffic to do so and even with connection pooling on the client machine is opening and closing connections to the database, all with their own overhead.
If you take all th
Re: what the query (Score:2)
Re: (Score:2)
Yeah, but 4000ms are still a few ms ....
Re: what the query (Score:1)
Re: (Score:2)
Just kidding, all my code runs in milli seconds :P
Re: (Score:2)
depending on the use case, 18 seconds vs 6 seconds sometimes isn't really that big of deal. I've seen badly written queries that when written differently drop from hours down to seconds.
Attitudes toward SQL (Score:3)
I have encountered many developers who believe that SQL is something your ORM layer should write for you, and that's the end of the story.
They want to use something like Hibernate [hibernate.org] or Entity Framework [microsoft.com] to manage data retrieval and storage, so they can do all the processing work in-memory using a neat set of strongly-typed objects. And this fits well with an n-tier architecture. So it seems like a win all around.
And, in many cases, it is. But it is simply NOT the end of the story for SQL. For applications
Re: (Score:3, Insightful)
My (admittedly biased) summary of your post. Avoid writing SQL if you can. But sometimes you can't.
Pure SQL is a query language, not a programming language. Some flavors may be Turing-complete, but if you're doing general programming entirely in SQL, you're doing it wrong.
Re: (Score:2)
No, you got it wrong.
Doing all the data access using SQL is the right way - its the native tool for accessing the DB. Trying to do all tat in c# or Java is the wrong way, its trying to translate your tool to be a different one.
So the post is effectively, use the right tool for the job. Write SQL when you need to query DBs (not write everything in SQL, that's just daft)
Re: (Score:2)
excellent point.
due to working at a non-profit with a small recruitment budget, we pretty much have to hire new grads all the time. NONE of them have a clue how to use SQL but are pretty good with python, C# etc. We are running a lot of workload in AWS and it's pretty funny seeing them try to pull data out using really convoluted routines in jupyter notebooks or pyspark.
Re: (Score:2)
I'm afraid you're getting me wrong. I'm not against writing SQL as part of the solution. I'm against writing too much SQL. And believe me, I have seen what too much SQL looks like. It's a heap of boolean spaghetti that strains the language to do something it wasn't designed for.
I do get what Brain-Fu is talking about. Being overly enamored of ORM can cost you. The key thing is to recognize the balance. Write enough SQL to get the data efficiently into your analysis code, but no more than that. SQL code is h
Re: (Score:2)
SLQ code is truly trivial to unit test. You even have transactions so you can unit test on any DB you have - start txn, input test data, run sql, compare, rollback.
Admittedly, you do not want to use SQL to do things it shouldn't be used for. Exactly the same argument against trying to use an ORM and C# for stuff that you should use SQL for!
Re: (Score:2)
Re: (Score:1)
Re: (Score:2)
He made a query that spent 15 SECONDS in the query engine figuring out what to do before the query which took 3 seconds to perform.
Was the query, "Does this dress make me look fat?" 'cause then I understand the delay figuring out what to do.
Re:what the query (Score:4, Interesting)
I'm a systems administrator at work... our ticket system is something they paid somebody to layer onto SugarCRM (then they stopped using SugarCRM and only use the ticket system). The reporting is another layer on top of that (I think built by our development department). I got tired of reports taking seconds to minutes to run, so I finally took a look. I figured there was probably some unindexed field being used or some such, but no...
The queries are terrible (like, to took me a bit to figure out how they even worked), but the performance is terrible because a key field used in multiple parts of the joins is latin1 in one table and utf8 in the rest (this is MySQL), which means that no indexes can be used because an implicit type conversion has to take place on every access, across the 5000+ rows on the latin1 table. Everything else in this system is utf8, and the field is storing ASCII UUIDs, so the obvious fix is to just convert the particular column to utf8. In my dev test, this took one main query from 74 seconds (and that's hot-cache!) to 0.3 seconds.
You'd think that since it is doing a one-time explicit type conversion on the ASCII data, to replace the implicit type conversion already happening and dramatically speed up an operation done many times per day by a number of employees, this would be a simple change. So far, a month after I pointed it out, the development department is still pondering it. How/why they managed to create a single latin1 table to begin with boggles the mind...
Re: (Score:3)
Don't know about MySQL, but in PostgreSQL you can create an index on that column to store the result of the conversion function so that it's both cached for immediate use and automatically kept up to date. If you can do that, it's a workaround which might save a lot of time without needing to adjust the schema immediately.
Re: (Score:2)
Re: (Score:2)
Wow, that is actually a super good hint!!
Re: (Score:2)
Re: (Score:2)
Don't be like my old boss! He made a query that spent 15 SECONDS in the query engine figuring out what to do before the query which took 3 seconds to perform. Don't try to do everything in one query. I broke it into 4 parts and wrote an aggregater in about 20 lines of php for a total runtime of 6 seconds with much prettier results. Sheesh, kids these days...
If the problem was making the results look prettier, that's not what SQL is used for. Use your PHP or another general purpose language for that. SQL is not a general purpose language. The SQL language is used specifically for managing and processing data, structured data, in a relational data management system (RDBMS).
About your boss's time delay, my guess is he was doing the query wrong.
Considering how small the SQL language is, I should be surprised more people don't take the time to master it. But I
Re: (Score:2)
SQL is an acronym for Structured Query Language.
It has nothing whatsoever to do with the architecture of the underlying datastore. SQL can be used as a Query Language for systems which store data in Relational, Hierarchical, Network, or Network Extended (just to name a few) datastores, just as a navigational interface can be used to access data in any of those datastores just as well.
If fact, there are many products which provide BOTH SQL and navigational interfaces to a plethora of underlying datastore or
Re: (Score:2)
SQL - write more to get less output.
But more important than knowing SQL is to know how to make a proper database model with correct indexing to achieve the best possible performance.
Re: what the query (Score:2)
Re: (Score:2)
Let me guess: MySQL?
Re: (Score:2)
or you could have written it as a stored procedure, that aggregated 4 query results into one, that would have been much faster and efficient.
But you need the SQL skills to do these things.... which is the point.
Re: (Score:2)
This has always been the problem with SQL. Everyone "knows it", but very few actually understand it. And when the PHB figures this out, he changes all his recruitment ads to request "SqlServer" or "Oracle" instead, as if that will magically solve the problem.
Re: (Score:1)
Your boss should have put the query in a stored proc that cached the query plan so that the 15 seconds is spent once and then after that it's 3 seconds a pop instead of your 6.
Happy Dance (Score:1)
I don't know C#, so I've got 9 out of the 10. I guess that means my family should have shelter and food for the foreseeable future. Yay
Re: Happy Dance (Score:1)
Re: (Score:2)
My knowing of Lisp and PROLOG are useless...
I know them too, and was paid to program in them as a research assistant in college. Those languages helped my programming and logical problems-solving skills. I've been pretty successful career-wise and monetarily over the past 30 years.
Re: (Score:2)
Re: (Score:2)
The only difference between a Java programmer and a C# programmer is where their code can run.
FTFY.
Yes, I know that jvm and .NET core are available on a broad spectrum of systems. And that's a good thing. But Java is more common.
Re: (Score:2)
Tastes for C# are more crude due to the fact that C# has the "anonymous" 'var' declaration of variables, which is a dirty solution.
Re: (Score:2)
"var" is not anonymous - its syntactic sugar for "oy, compiler, put the variable type here for me". When the compiler knows the type, its all good - it even shows you what it is if you hover over it. If it doesn't know, it complains with an error.
That's not anonymous type, thats a little bit more programmer productivity.
Java has var (Score:2)
Java got support for var in v10 (2 years old)
https://blog.codefx.org/java/j... [codefx.org]
Re: (Score:2)
Re: (Score:2)
Nearly all the times i've used var is in direct variable assignment: var x = new MyObj(); for example. You can tell what that variable is pretty easily.
For those coming out of a function call, the var is almost as good, because you know what the return type is in order to create the declaration in the first place.
And most of the time, if you want ot know the variable type, your editor tells you, if you have a dumb editor where you have to scroll up to find the declaration, then you have other problems that
Re: (Score:1)
MySlashDotClassExampleCouldBeLongish anotherMaybeLongVariableName = new MySlashDotClassExampleCouldBeLongish ();
That just initializes it.
Redundant and bad afaic.
Re: (Score:2)
You're a fucking moron. The .NET framework is gigantic and one person cannot possibly know all of it. Java has piles of different frameworks, I don't even consider "Java" to be a thing you can have experience with. You know a few frameworks, you don't necessarily know the one we use.
Yes a few simple regex replacements can convert one to another. But it won't build nor run. And now you have to read a bunch of stack exchange questions. Sure we all do that but it's not knowing.
Re: (Score:2)
"IF you throw a rock in a pack of dogs, the one that yelps loudest is the one that got hit."
Re: (Score:1)
Java recently got lambdas (that's a big deal), but it doesn't have the same parallelization API.
Overall, they are very similar.
Visual Studio is a strong case for C#. I work in eclipse everyday and hate it.
Re: (Score:1)
Depends on how old you are ...
7 years later at 57, casualty of corporate merger and
have not heard from a headhunter or a inside recruiter in almost 2 years.
You've got me by a year and change. Hang in there.
Re: (Score:1)
I've seen this with Linux... (Score:2)
Re: I've seen this with Linux... (Score:2)
But if you know one flavor inside and out, you can pick up a new flavor very quickly. Recruiters expect you to do that on your own time.
Re: (Score:1)
Re: (Score:2)
The problem is one of your own making.
Instead of putting "Linux" put "Linux (All Variants)" and instead of "SQL" put "SQL (All Variants)".
Do this for anything for which there is more than one variant. If secretaries had to deal with the same sort of inbred useless crap they would put "Typewriters (All Variants)" on their resumes too in order to meet the demands of assholes who do not know that there is very little difference between an "Underwood Typewriter" and an "IBM Selectric Typewriter" (assuming that
Re: (Score:2)
If you give the wrong answer to the recruiter you are out.
The guy who hied the recruiter expects that, the recruiter only checks checkboxes.
Re: (Score:2)
MDBS III & IV
There you go. MDBS is a Network Extended CODASYL database system that happens to have an (optional) SQL query interface as well. It is not a relational database.
(refer up to my previous comment about SQL)
SQL will be my COBOL (Score:5, Funny)
I look forward to retiring to a nice cushy job writing SQL queries. Right now, it's not interesting enough, but when I get tired and all the juniors who grew up on NoSQL have no idea how to work in the old systems, I can step in for stupid amounts of money.
Re: (Score:2)
I know COBOL, and the truth is there is no demand.
The pay is high, because the companies still running the old systems still have the old senior-level programmers. If they're actually hiring somebody new, they offer the same pay as for other languages. But they don't actually hire somebody new.
This is different. SQL isn't the old thing. It is the only thing for that use case. NoSQL is just for different use cases, it isn't an alternative to SQL.
Re: (Score:2)
The trend now is to start with SQL, then when you start growing, profile the slow or frequent queries and migrate those to Redis (or something else), instead of trying to do it all in NoSQL.
Re: (Score:2)
Re: (Score:2)
You either have a misunderstanding about the ease or the simplicity of developing and maintaining databases.
Window functions. Recursive queries. Aggregates. CTEs. JSON transformations. Pivots. Temporal queries. Partitioning. Foreign tables. Replication. Triggers. Event triggers. Proper indexing including partial and expression indexes. Stored procedures. Row-level security.
SQL is a DSL for set theory.
Re: SQL will be my COBOL (Score:2)
Yeah, all old hat. This shit's been around forever.
Re: (Score:1)
I look forward to retiring to a nice cushy job writing SQL queries. Right now, it's not interesting enough, but when I get tired and all the juniors who grew up on NoSQL have no idea how to work in the old systems, I can step in for stupid amounts of money.
This has been my entire business model since about 1998.
Re: (Score:1)
You mean the same employers that ... (Score:2)
... declared HTML a "programming language".
Also, I don't have an employer. I have *clients*! *They* try to get *me*. Employers are for chumps and livestock.
Re: (Score:2)
current employer pays more than what I had consulting though, it's very nice to have the benefits too when having a family.
Re: (Score:2)
... declared HTML a "programming language".
Top Programming Skills'
No one here except you has said those two things are programming languages. It clearly says Skills.
You only won an argument against yourself. Congrats I guess.
If we admit your argument, then Excel, Word, and PowerPoint are programming skills. And no, they're not.
Re: (Score:3)
Knowing how to do complicated stuff in Excel most certainly is a programming skill.
Re: (Score:2)
To paraphrase Janet on "The Good Place" (Score:2)
The list actually includes the top 18 programming skills, but besides languages like C++ and .NET, it also includes more generalized skills like "Agile development," "debugging," and "Unix."
"Agile development" and "Unix" are not a "skill". And they're not really things learned and known in the same sense as a programming language. They're experience, methodologies and approaches -- mostly useful, though I have many mixed feelings about "Agile".
Re: (Score:2)
"Agile development" and "Unix" are not a "skill".
Of course they are skills, what else would they be? Knowledge? Ability?
And they're not really things learned and known in the same sense as a programming language.
Of course they are.
In the end they are all turtles down to the bottom.
though I have many mixed feelings about "Agile". ... rofl.
Obviously, when you approach it differently than a programming language
I wonder if Python is as permanent as Java (Score:2)
Java still maintains a heady position on that list, because a while ago it moved into use across many, many enterprises.
It seems like maybe Put-on is heading the same way, but then over time I've seen python come and go in enterprise rolls, usually replaced by some language/flavor of the day...
I wonder if things are being built in the enterprise now in Python that will be as enduring as Java has become, it seems like this time it might have a chance as Python has much wider adoption then I've ever seen befo
Re: (Score:2)
Re: (Score:2)
Re: (Score:2)
That says something (Score:2)
Knowing SQL is invaluable for everyone in IT!!! (Score:2)
As a systems administrator with scripting skills who is now doing mostly scripting and development work which needed to access many data sets coming from various systems such as corporate databases it became insanely valuable to learn SQL and understand it for my role and future career path.
The ability to write a SQL query that can do many joins across many tables and also query remote databases on other servers in the same query with a join and perform aggregates and also do manipulation on datain various
SQL is easy (Score:2)
The "Simple Query Language" is about the easiest thing to learn in the world. What is hard is known in what specific way a specific SQL-Engine is messed up.
Re: (Score:2)
Re: (Score:2)
I did expect that somebody would fall for the bait....
However, if you think complex (relative) SQL is complex (absolute), you have never done real complex algorithms.
While an intern in the 1990s (Score:2)
Going to university (for actuarial), got an IT internship at a life insurance company.
Boss man recommended I learn SQL.
Great recommendation.
Subqueries as joined data is the secret. It is the power.
Hooray (Score:3, Insightful)
Re: (Score:3)
It's time to kill AC posting entirely, even for registered /. accounts.
Re: (Score:2)
I consider being threatened and insulted by AC Nazis an honor.