What software tool can do more than people realize or give it credit for?
For further actions, you may consider blocking this person and/or reporting abuse
What software tool can do more than people realize or give it credit for?
For further actions, you may consider blocking this person and/or reporting abuse
Edwin Gonzalez -
Gaurav Singh -
Lincoli Xavier -
Jimmy McBride -
Top comments (83)
Not a software tool, but a notebook. Writing what you are going to code/design has saved me countless times. Some "easy" problems turned out to have a lot of edge cases, some hard problems became much easier to approach when I wrote down what made them hard.
Diagrams are far easier to draw on paper. Drawing data structures and flows makes it easier to debug edge cases. Drawing system diagrams helps to identify possible bottlenecks while scaling or possible points of failure.
Also, the notebook doubles down as a To-do list. It is a lot more satisfying to cross-out a task physically than in any app. And it always stays on my desk so there is no question of closing the tab / forgetting to update it.
Most importantly, you can flip through it and have a look at why you made some decision while coding or designing. Also, you can draw doodles when bored :)
Even better, IMHO, is a whiteboard. It's so easy to throw ideas on a whiteboard, and then erase/rewrite over several iterations. When you're done, just snap a pic to archive it.
I like paper beacause I can carry it arround and keep working on it but when I can I use a whiteboard. What I like about the whiteboard is that you can literally step back and have an overview which can help when you're stuck.
I use both paper and whiteboards, for those separate purposes as well.
I kinda agree with this, but I think paper is good mostly for drafts because it can quickly become a huge mess when you have a lot of changes to make, especially on diagrams. Plus it's hard to backup and share paper.
And that's not environment friendly ;)
And about To-dos, at least where I work, it was possible to repeat a to-do multiple times in the same notebook and lose others if tasks got interrupted by other tasks (which used to happen much more frequently than it does currently).
I came here to say this. Paper is the best. It helps you see the forest for the trees, and get unstuck.
And it never crashes unless you get it too hot.
Bullet journalling is also a great way to get your thoughts out.
It tends to char a little when you get it too hot though. ;)
Yes! Paper forever!
Might be too mainstream of an answer, but I still get surprised sometimes about what CSS offers without needing JavaScript. Animations/transitions can all be written without the need for JS. New features like variables, flexbox and CSS grid are making CSS even easier to use.
The combo of HTML/CSS is what has made the web so enduring and durable. It is why so many technologies are now "Make desktop apps with HTML/CSS" (Electron) and "Make mobile apps with HTML/CSS" (React Native, Ionic). HTML/CSS is just one of the best ways to make a solid UI.
I feel this many times when I see animations that CSS can handle made with JavaScript.
CSS Grid is awesome!
AWK
It can do anything with delimited data tables with millions of rows in a few lines of code, as fast as a Go, C counterpart program.
In Python you need to write lots of lines, use third-party libraries to normalize columns with regex, dropping rows, etc. In AWK, it's just a one liner, or you can write it in an
*.awk
file as well.AWK is a secret gem for dealing with big data.
Update:
I share my AWK script where I normalize a millions of lines long delimited CSV table only with AWK, as fast as a Go counterpart program:
100% agree, I love awk and use it all the time! Also: combining AWK with the other UNIX utilities such as
cat
,sort
,uniq
etc.Have you ever read Ryan Tomayko's AWK-ward Ruby? I didn't realize that Ruby had inherited so much from AWK, but it makes me happy as a Ruby user.
I'm going to put Ruby under this one, as well. Ruby inherited a ton of Perlisms that make it competitive with Perl, awk, and sed for these types of use cases. But they're really underused Eg the following flags are all relevant here: n, p, e, i, l, a, s, 0, c, F, and the 2-letter globals
ruby -e 'puts global_variables.grep /\$.$/'
andBEGIN { ... }
andEND { ... }
andARGF
and flip flops (which most people don't even know exist), and regex literals in conditionals, and the private methods that are added tomain
when-n
and-p
flags are set. IDK, probably other stuff, too, that's all off the top of my head.PHP.
It usually gets a bad rap about being horribly ugly and difficult to work with, but that's just old PHP and Wordpress. Modern PHP frameworks like Laravel are amazingly powerful and pleasant to work with. And when you use PHP as a proper OOP language rather than for templating, it works a lot like a dynamic Java with some nice constructs for server-side development.
It also has the most powerful built-in datetime parser of any language I've used; it correctly parses just about anything you throw at it without needing to give it any kind of format string, which is great for parsing user input.
Nuh huh. PHP is horribly ugly and difficult to work with, and that has nothing to do with Wordpress. Modern PHP frameworks are just that - frameworks - and they are not the language.
You can put syntactic sugar on anything and say it's sweet!
Hey Ben, I wouldn't agree with your assessment. I'm not sure what you mean by it's horrible and ugly. Sure, frameworks like Laravel enhance the language and make it more concise and abstracted, adding great functionality but it doesn't 'fight' against it as if the framework is somehow covering up issues.
Rails, for example, is mostly used by Ruby devs. Does that indicate Rails is bad and therefore Ruby is also?
Rails being mostly used by Ruby devs has nothing to do with whether Rails is bad or whether Ruby is bad, and Rails being good or bad has little to do with whether Ruby is bad. I'm not sure what parallel you're trying to draw?
Fighting against the language and covering up issues is exactly what frameworks like Laravel do. Using an ORM instead of a selection of different legacy database connectors? Wrapping disparate date and time functions/classes in one interface? Replacing the "every page is an endpoint" approach with a router? These are things frameworks do, so it doesn't matter so much that the language is as inconsistent as it is.
Exactly, you're able to do much more with PHP than many people would realize because there are some really great frameworks available in PHP that smooth out these inconsistencies.
Before I really got deep into PHP and found these great frameworks, I had believed that PHP and anything to do with PHP should be avoided like the plague, but that simply is not the case. The bad/old PHP tools (read: Wordpress) should be avoided like the plague, but that doesn't condemn the language itself or the other great tools for it.
I agree @Casey Brooks. PHP was the absolute first language that came to mind for me as well. I'm not a PHP fan-boy by any means. When I first used PHP I was like "Erm-a-god this is so horrible!" But by the time I finished the project I was like "Oh, I really like PHP, who knew?".
PHP, despite all its oddities and pain points, works... It absolutely works. And that is pretty much what matters.
And that is what I like about PHP. People are like-
"Hey PHP, the way you did was not intuitive. There are sooooo many better ways you could have done that. What kind of stupid idiotic decision was that!?"
And PHP responds-
"Did it work?"
The fact that you need to use PHP like Java in order to write maintainable code says it all. All these devs saying that it's not that bad when you follow all the best practices don't realize that all the time they're spending making non-shitty code in a shitty language is completely wasted. If you're smart enough to write good code, then do it in a language that doesn't get in your way.
PHP is a language that didn't expect developers to write actual applications with it. Even though it might be better than it was before, you're still working with the language in a way it wasn't initially designed for. This results in objectively cumbersome, verbose code. Working with a language thoughtfully designed to be used the way you're using it will double your team's productivity.
For every dev coming out of old PHP/wordpress hell, modern PHP frameworks are indeed much, much better. But they're frameworks, the language itself is still clunky and unproductive. Frameworks in other languages have been a thing for much longer. Combine this with the fact that these languages are actually designed to let you build fully fledged applications and you get a development experience that is better than anything you could ever have with PHP in the equation.
To counter that, I would just say that writing a backend in any language is only as good as its frameworks. Without Rails, would anyone be writing Ruby backends? Or Java without JEE or Spring? Python without Django?
This is the fundamental reason why frameworks exist, because there are limitations or "clunkiness" to every language, and there needs to be some better way to use that language for a particular application. Who cares if the PHP language itself isn't quite as pleasant to write as Kotlin or Go, I'm still many times more productive developing backend applications with Laravel and Eloquent than I would be with anything else, and I believe many people would agree if they would give it a serious shot.
And furthermore, why is it impossible or wrong for a language to mature to be used in different ways than it was originally created for? HTML wasn't initially designed for interactive applications, and even CSS was bolted on after its inception. Javascript wasn't designed to work outside of the browser, so are Node developers as stupid as Laravel developers? No! Rather, it is these developers that are pushing the innovation of the language and its frameworks and making it better and better, not holding it back.
The fact that PHP started as an ugly templating language and has matured into a powerful dynamic OOP language isn't a sign that the language has lost vision or is unfocused. It actually shows how dedicated it is to being a great language for server-side development. And the fact that there are objectively great frameworks for PHP show that is has a power that many people don't realize.
A framework shouldn't fix your language. Frameworks exist to provide a set of abstractions as a common ground when building certain types of applications. That's why we need them. Their job is to orchestrate libraries and third-party code into a cohesive system, not redefine the experience of working with the language.
I agree that ultimately, productivity always comes down to personal preference. If you've tried other technologies and can demonstrate that PHP makes you more productive, then why not. I did give a serious shot to plain PHP, Symphony and Laravel, and I can tell you that even by slapping a framework on top of it, PHP still slows me down because of its infuriating inconsistencies. I have no problems with Laravel, I think that it's a great framework. The problem is PHP.
I have nothing against improving existing ecosystems. The improvements made to HTML and CSS over the years made things that weren't possible before possible. But they don't have any competitors. There is nothing to take their place so they need to get better. Node filled a gap in server-side development by proving itself as a very simple solution to applications with complex asynchronous needs.
PHP, on the other hand, is filling a gap that doesn't exist. It's in direct competition with python and ruby for instance. The industry didn't need PHP to "mature" into the clunky language that it is today.
I actually have mixed feelings about the existence of frameworks like Laravel in the PHP ecosystem. I mean, it's great because it keeps people from writing home-grown atrocities. But because Laravel makes PHP somehow usable, everyone thinks that, well, it's good enough so no need to look further. They stop seeking an acceptable solution. Using a framework in PHP should be the "AHA!" moment. It should make you realize that it's universally the way you're supposed to do it, and the fact that it's so different from what you're doing in plain PHP should make you understand that using a language geared towards this kind of usage should make you more productive.
But if PHP is your jam and you actually researched and studied the various alternatives, then the reasons that you have for using it are probably valid and enough for you to consider it to be the best suited tool. I happen to have come to a different conclusion.
I think PHP is a pretty solid language. There are some frustrating inconsistencies, but PHP 7 has come a long way. We, as a community, are getting things we desperately need and want like stronger typing, better performance, and hopefully (soon) generics!
I get what you’re saying, but I also feel like dismissing PHP too readily is akin to throwing the baby out with the bath water.
I can’t disagree with your position that, if a developer is most productive in a language, then he or she would be able to work around its shortcomings in a way someone else might be unwilling.
For me, it’s very much a matter of time and productivity. I consider myself a polyglot developer (with varying levels of skills in different languages) but for me, it would be inefficient to gain an expertise in Python or Ruby and still deliver to my company what they need to make money and reduce risk. PHP is very much, for us, a business decision. There are better languages suited to what we need to do, but we simply couldn’t produce what we can today by switching.
To do simple web things in Java you will need to use a lot of frameworks, implement a lot of interfaces, inheritance a lot of class and all those "I am so object oriented and corrected"'s stuff.
There are very big projects in PHP, so its no impossible to maintain large code bases.
PHP is the best worst programming language, you will find tons of web ready projects ready to use, you will loose time choosing a template of it. You will not find anything comparable in the Java's world.
I love it! I need to remember that line!
For the "credit part" I think is Bash. The entire internet works because of it, including all the new shiny Continuous Deployment pipelines.
As for powerful ... depends with who you're talking to, choose the ones that they do not know anything about and they will be surprised. Now days mostly pure FP languages like Haskell, Java/C# are importing FP goodies and their devs still think it's OOP magic.
I came looking for bash!
People never seem to realize just what you can do with bash. Sure you could write a python or ruby script to move those family pictures from various folders to one, or you could do the same thing in Bash without worrying about maintainability or shells or any other weight.
Honestly every time I write a Bash script more than 20 lines long I start regretting that I didn't write it in Python, and usually rewrite it.
I could be a lot more knowledgeable about Bash, sure. But it could also have fewer footguns!
I came for this.
For prototyping the most popular option is Python, whenever I get a chance I pick bash. Never failed.
Have an arrays mini crash course.
distro update script
Any language. People usually critics a language without really knowing it, and any language has some features really outstanding compared to competitors.
I feel like a lot of people don't realize how powerful Lisp dialects and Haskell are. I use Haskell almost on a daily basis and I would say it's the best language I tried so far. Both are so expressive, my programs take up mostly half the space I'd have used with a mainstream language
I've recently started dabbling in lisp, its been more fun then I thought!
Go Lang.
powerful, great performance and friendly syntax.
I believe JavaScript deserves more accolades than it's already getting. It can efficiently be used on both the front end and back end, it's kind of like the Thanos of Programming with its multiple frameworks which allows more functionality to it, and the addition of popular trends like Tensorflow.js and Machine Learning.js kind of give it an edge on Python
I will award 11 points for "Thanos of Programming".
You probably expected this, but I'm gonna say Perl 6. Released two years ago, it's an incredibly expressive and powerful language, which includes all major paradigms: object-oriented, functional, concurrent. It's got peerless Unicode support, and a small, but welcoming and helpful community. You should definitely give it a try, whether you want to learn a new language, or want to look at a full-featured 21st century language.
Some comments may only be visible to logged-in visitors. Sign in to view all comments.