Bad Tools - From Day 162 Q&A

In the Q&A of Day 162, Casey was explaining about how bad tools have become. Visual Studio is crap, slow, and just terrible; Emacs is slow; etc.

I have to agree with him on so many points and it's just sad.

It seems like the new tools that are being made are designed around web developers who cannot program and nothing else.

The editor GitHub is boasting, Atom, is one of the slowest editors I have ever used. Why the hell would you base an editor around a goddamn web browser?! The plugin system is slow and getting to the preferences panel takes 10 seconds! I would not recommend this editor to anyone unless they love not doing work.

Windows is getting worse and worse with each version. I really wish I could just not work on it but you _have_ to. I would move to Linux today if I could but there are not even decent C++ debuggers for OS that is supposedly developed by & for developers.

I am really pleased that Jonathan Blow is making a programming language that I would actually want to program in. It seems to be a programming language renaissance at the moment as it seems that every other week there is a new one. But each new one doesn't help as they try to add new features to a previous one or just have the same language but missing {} or something similar. Most of these languages are very high level, interpreted, web scripting languages. They probably program down to JavaScript as well (like there isn't already a hundred of those -- yes, there are about hundred).

There are some new languages out there that are good. Go and Rust are two that come to mind. At work, we program for servers and the programs are usually spread across multiple cores and processors. Concurrency is the problem. We used to use Java until we switched to Go and oh boy, it's a much better language. Go originally set out to replace C (I dunno how without manual memory management) but it has seemed to replace the Ruby/Python/et al. and some of Java. The language was designed for server systems and it works well. It's tools are pretty good except there is not decent debugger (good old printf to the rescue /s). Go is a very good language but it doesn't replace my/our need for C & C++.

Jonathan Blow's language, Jai (however you pronounce that (jay, jeye, jay-ay-eye)), is something I would use today. It's already better than C and nearly better than C++ (as a language). He is designing it from scratch and designed it around his needs and not anyone else's. It just happens that it meets mine and others needs.

Lately I have been having to "reinvent the wheel" for tools as most of them are just so bad. And to the point where I am developing my own text editor. I might help out with the Lime Text open source project but it feels like it will become slow in the future only to be compatible with everything (textmate, sublime, emacs, ...) or different flavours (Lime-emacs, Lime-sublime, Lime-vim, etc.).

Many of the game engines are awful. Unity is awful and only really good for prototyping but there seems to be so many games that use it now and even the 2D games don't even run well on a high end computer! I know this is probably due to bad developers but most of the time you are fighting the engine to do what you want it to do.

One other problem I have is with C & C++. Neither of them have decent standard libraries and you have to make your own. I will not use Boost. Boost is the most inconsistent and buggy PoS I have ever used. Yes there are parts that are good but I could easily implement those my self. And don't get me started on ctors, dtors, and RAII (well, C++s version of it). And don't get me started on build systems too (C/C++ shouldn't take more than 10 seconds and if it does, how/why?!).

***

I apologize for this rant but does anyone else feel this way? Is anyone else having to create even the most basic of tools because no one else seems to care anymore? Are programmers taught/reading that getting the job done quickly is better than getting the job done well?

Edited by Ginger Bill on Reason: Typos
"Getting the job done quickly" is as I believe a general problem in our hectic times. And it has not much to do with computers. But rather it is observable almost everywhere.

When it comes to bad tools and especially Windows, here's the provoking question:
What will you change?

I know it's not easy to answer and I know switching is not comfortable. I for example do dislike GDB as much as most people. But, as long as people are willing to accept the current status, they are part of the problem.

Don't get me wrong, I do not say it is baseless complaining or that things are golden. But as long as people complain but in the end still use (even buy) and accept the products as they are. There is little incentive to change.

My personal story, for anecdotal evidence and to show where I am coming from, is that at home I did switch to Linux at about 2000/2001. Is just had enough of the crap systems like ME had been and XP with the activation and TPM rumors seemed to be then (it was a huge thing back then).
Was it easy? Nope. Rather painful at times, I especially fondly remember things like DVD playback, compiling early versions of evolution and horrors like that. It still is painful from time to time. Some things windows user are even worse there (I look at you binary distribution of 3rd party software).
It not per say better than Windows. But at least I won't a) encouraging Microsoft that all is good and b) am bound to a binary blob where I have no chance to improve anything at all.
The real problem, of course, is not "getting the job done quick", because I am all for getting jobs done quickly! The problem is in the definition of "done". We should keep the idea that you want to get the job done quick, but add the idea that "done" means performant, robust, etc.! Because obviously we do want to pursue a future where things are faster to build, we just need to realize that we are not there yet, and we need to push harder on new languages, libraries, and methodologies that don't have the drawbacks of the current ones which are all about minimizing time at the expense of the quality of the end product.

- Casey
That is kind of what I meant. I want my tools to get the job done faster whilst not compromising on the quality.

One thing about emacs, I've been trying sublime text with sublemacspro and it actually works (for most things)! Sublime Text natively has a vim plugin which is disabled by default but no emacs default plugin. It may not replace emacs for you but I do like subl (as it is definitely not slow).

- Bill
Somewhat OT question, does sublemacspro support navigating the compiler build output in a sane way? I use some special build of emacs on my mac just to have this feature, otherwise I would consider sublime since It is so much snappier. I don't get what has happened to emacs since I used it on 8 MB Ram sparcstations in 95 with no speed issues... (If I remember correctly)
You can do anything fast if you already know how to do it. It's basically learning over time. For example, I was slow with creating a linked list but now I can do it fast because I kept doing it over and over for years to the point where I don't even have to think about.
Also as Casey says (I might be wrong) they never really measure the time differences between creating program X in Y language saves Z time because it's really a waste of time.

I think the problem with software and game is that people do a half-a** jobs with their games,software and tools. They also don't understanding whats happening in the low level. My boss who only did python thought, oh we can multi-process and the program will run faster but he didn't think about the low level portions like process not being able to share memory space or causing a deadlock or timing or writing to a file. He just though, oh this will speed it up.

Edited by popcorn on
C0D3
I think the problem with software and game is that people do a half-a** jobs with their games,software and tools. They also don't understanding whats happening in the low level.


I completely agree. I think part of the problem is that they expect the compiler or OS to "just handle it". The compiler can optimize basic things but not completely change what algorithm you use.

I don't know what the cause of the problem is. Teaching? Crap blogs? "Best practices"?

- Bill & his rant
It is my understanding that the problem is largely a combination of educational and institutional. What is commonly taught differs somewhat dramatically from what is commonly hired on / encouraged in large software companies which differs somewhat from what the actual best practices would be.

I'm about to start a CS program at the University of Washington in the fall, maybe I'll keep a weekly blog to give people an idea what a programming education at a modern university looks like. Though from what I understand the UW is probably better about it than many other schools.
I certainly won't disagree about the state of the modern software stack. Windows is legacy bound, every release adding layers of mess heaped upon the layers that existed prior.

I watched COM come into existence, and recognized the need for a binary interface higher level than c name mangling. I wish they had at the time directed their efforts to standardising a subset of the c++ abi (which is really what COM started out as)

Then "managed code" happened. Personally I think that is where it all went pear shaped. These languages (and runtimes) that suggest the ability to produce "safer" code. Prevent programmers from using pointers and yes, they will not deference a null pointer. That is one of the infinite number of mistakes a programmer may make, but at what cost have we paid for this big win? If you try to protect the programmer from themselves, you have already lost the battle.

Don't get me wrong, I'm not saying these (Java, C#, D, Go, Rust, or any) languages are bad. Use what does it for you. But knowledge is king. Never buy the argument that this language, this feature means you don't have to worry about safety, or performance, or constraints, or alternatives. The programmer always has to know the cost of the code being written.

And, to push back a little on Casey's views.

c++ doesn't make programmers worst. JAI won't make programmers better. There are eco system contributions as to why our tools are poor, ranging from differing priorities to marketing demands. There are bad programmers. There are also good programmers out there who make the best decisions they can based on the knowledge available at the time.

And finally, for me, what I want in a language is tools. I don't have any time for any methodology, be it oop or compression or data or any oriented. They are all just fluff on paper, generalising when the specific is required. At present, that language for me is c++. Templates may be a complex syntax, but they work to solve specific needs. I like that encapsulation will allow the compiler to tell me I at the time considered a member to be implementation private. I'll use references and const, they both have the compiler check against my thinking process. Casey says the stl is badly designed. I may see bad design elements in certain places, but will still see value in it when it is the tool that works best in a given situation. But, again, just know what you are being changed for the use of a feature, know if it is an acceptable cost.
raxfale
These languages (and runtimes) that suggest the ability to produce "safer" code. Prevent programmers from using pointers and yes, they will not deference a null pointer


This is not true. NullPointerExceptions in Java and NullReferenceExceptions in C# are very common.

/Kim
I think it would be interesting to see the kind of things they teach at school as kind of a research project.
Education is very important and I also think it is one of the problem of faulty software.

I think the problem with high level languages being bad tools to use is not being able to control errors properly. For example, if I get disconnected from the internet/router, livestreamer will not let me exit the console with ctrl+c.Yes, I could do a work around but this kind of stuff should not happen.
Not to mention how most high languages users use try and except, which is a horrible way to check for errors and not the proper way to handle errors.

It's funny how they say that it's "safe" (Just reminds me of an over protected mom who wouldn't let their kids without their outside (with out a parent) because it's not safe.) and yet Java is has a lot of exploits. C and C++ does too but the point(er) is that nothing is safe.

Edited by popcorn on
C0D3
It's funny how they say that it's "safe" (Just reminds me of an over protected mom who wouldn't let their kids without their outside (with out a parent) because it's not safe.) and yet Java is has a lot of exploits.

To be fair to Java, very few (if any) exploits were caused by flaws in the language or VM. Java's security model has a single point of failure, the SecurityManager. Almost all exploits break that component, or use bugs in other parts of the library to bypass that component.

It's a very broken design, and always has been.

C0D3
[...] nothing is safe.

There is no "safe", only "safer".
gingerBill
C0D3
I think the problem with software and game is that people do a half-a** jobs with their games,software and tools. They also don't understanding whats happening in the low level.


I completely agree. I think part of the problem is that they expect the compiler or OS to "just handle it". The compiler can optimize basic things but not completely change what algorithm you use.

I don't know what the cause of the problem is. Teaching? Crap blogs? "Best practices"?

- Bill & his rant


"Not understanding whats happening in the low level" and "people doing half-ass jobs with their games, software, and tools" are two completely different things. Neither is necessarily a cause of, nor an effect of, the other. I've seen folks without any low level understanding do ACTUAL MAGIC in Java, and I've seen people who know by heart all the register names and most x86 instructions relevant to their work write code that is absolutely awful. An analogy: knowing how to properly use a screwdriver does not prevent you from stabbing yourself in the eye with it.

If you don't like the tools you're using, use different tools. I suspect you're looking in the wrong places; you seem to really have it in for web developers...

Look at Sublime Text or Vim for editing. They are both EXCELLENT in the hands of someone that takes the time to learn them, and they are not slow editors by any means. Sublime Text is written in pre-compiled Python if I recall, and is far faster than my fingers. With both Sublime Text and Vim, one can set up their own build systems internal to the editor, all kinds of assistive stuff that makes other editors slower. Give them an honest shot. Vim, especially, is far quicker than any human fingers.

Too many of HH viewers seem to think that managed code languages are the root of all evil, and I don't know what to say to that, other than "you're wrong." It makes no sense to argue for C and C++ and almost simultaneously complain about Windows this or that (which is written in C/C++.)

Code quality and code language are NOT RELATED. PERIOD.

Any language, even the MOST object oriented languages enable a skilled developer to write code that is crafted to fit the problem at hand, solve problems elegantly, and perform well.

Any language, even the LOWEST level languages enable an unskilled developer to write code that needlessly consumes CPU and RAM, performs poorly, and loads a thousand libraries just to write a string to the console.

The problem is not the language(s) used by any developer or on any project. The problem is that of developer skill level. Few enjoy teaching, really teaching, and unsurprisingly, few good developers emerge from any given school, employer, or project.

Few enjoy teaching, and fewer have the patience for it. Lots of people can demonstrate how to do something, but that isn't teaching.
[quote=naikrovek]The problem is not the language(s) used by any developer or on any project. The problem is that of developer skill level.
I can cut down a tree with a butter knife, but give me an axe and I'll be much happier.


[quote=naikrovek]If you don't like the tools you're using, use different tools. I suspect you're looking in the wrong places
Most of time you end up with a single tool that fits your need. Stuff like text editors are not really a problem. But finding good replacements for C++, SDL library, 3ds max, Wacom tablets, AutoCAD, html, css and Javascript is more of a difficult problem. Especially when tons of people claim that these are "good" tools.

A path to better tools is to a least acknowledge that the tools we use today is bad. And not inherent their mistakes. (I did like this because tool X did it like that./ This is just as fast as tool X./ Tool X is the best there is so how can you say it's bad?)
[quote=naikrovek]
If you don't like the tools you're using, use different tools.


I agree but sometimes, that tool is the best but it takes time to learn.

[quote=naikrovek]
...I suspect you're looking in the wrong places;...


Not always. If you are looking in the wrong places, I would not say you are at fault but the resources may not make it easy to find the correct tools.

I'll take classical guitar to be an example. I used to shape my nails with an ordinary file that you could get any way. It wasn't until I was told that using something like jewellery paper would actually make the nails smoother and remove the string scratching. A book/article didn't tell me but another musician that I respected. The internet is filled with mediocre or small skill set players but once in a while, you will find one you agree with and respect.

Sometimes, you cannot see the trees for the forest.

[quote=naikrovek]
...you seem to really have it in for web developers...


Kind of. It depends what you mean by web developers.

If you mean back end, no. Many of them know what they are doing to a point.

If you mean front end, maybe. There are some good developers out there but a lot of them have seemed to forgot about 2 things, web size & long time, and people who have CSS/Javascript/etc. disabled.

Those types of developers will import JQuery for everything! The latest JQuery is 94 KB minimized!!! That may not sound like a lot to most but when you are on a phone in the middle of nowhere, you will be waiting ages just for that to load. Also, most of the time, people will not just JQuery but another framework to "make their life easier", and more.

A lot also don't develop there website around people who have CSS disabled (e.g. visually impaired, people with poor internet) or javascript disabled. Sometimes it is necessary to have javascript enabled but always. If it is, leave a message saying this site requires javascript.

https://twitter.com/xbs/status/626781529054834688

[quote=@xbs]In about 7 months average web page size will be same as Doom install image.

Well done us! Onwards & upwards!


The amount of To_Js_Languages, I have seen is over a hundred. There are dozen css preprocessors and a dozen html preprocessors. The base tools are not good even and I might even say -- flawed.

[quote=naikrovek]
Look at Sublime Text or Vim for editing. They are both EXCELLENT in the hands of someone that takes the time to learn them, and they are not slow editors by any means. Sublime Text is written in pre-compiled Python if I recall, and is far faster than my fingers. With both Sublime Text and Vim, one can set up their own build systems internal to the editor, all kinds of assistive stuff that makes other editors slower. Give them an honest shot. Vim, especially, is far quicker than any human fingers.


I absolutely love Sublime Text. I am so god damn fast it (compared to others editors I have used in the past) but it has taken 3 years to learn its nuances and features (and I am still learning). My problem which text editors is not the GUI ones but terminal ones. There really only a few good ones to choose from and even emacs is still slow.

[quote=naikrovek]
Code quality and code language are NOT RELATED. PERIOD.


For many languages, I will have to agree but have you tried javascript at all?

[quote=naikrovek]
The problem is not the language(s) used by any developer or on any project. The problem is that of developer skill level.


You choose the right language for the job. E.g. If you are working on embedded system, you are not going to use ruby. I could but it wouldn't be easy.

Edited by Ginger Bill on