Blind Not Dumb (Posts about programming)https://www.feoh.org/categories/programming.atom2024-01-21T01:02:41ZChris PattiNikolaMis-Adventures In GatsbyJShttps://www.feoh.org/posts/mis-adventures-in-gatsbyjs.html2022-05-20T16:14:19-04:002022-05-20T16:14:19-04:00Chris Patti<figure><img src="https://www.feoh.org/images/Octopus.jpg"></figure> <div><p><img alt="Key West Octopus by oe Parks is licensed under CC BY-NC 2.0" src="https://www.feoh.org/images/Octopus-smol.jpeg"></p>
<p>Over the last few years I've been feeling like living exclusively in my Python programming happy place is something I can't afford to do.</p>
<p><a href="https://www.feoh.org/posts/mis-adventures-in-gatsbyjs.html">Read moreā¦</a> (6 min remaining to read)</p></div>2021 - The Year Windows Became a First Class Python Development Environmenthttps://www.feoh.org/posts/2021-the-year-python-became-a-first-class-python-development-environment.html2021-06-08T22:12:00-04:002021-06-02T17:54:00-04:00Chris Patti<p><em>[06/08/2021 Update: Added a bit about Windows Terminal. Dunno how I forgot that the first time around!]</em></p>
<p>As I've written about previously and elsewhere, I felt so badly burned by Apple's laptop
hardware design decisions of a few years ago that I've rather fallen out of love with that platform for my personal work. The latest hardware is much better, but I feel like the message has been sent and received, so I'm not rushing back any time soon.</p>
<p>My first choice was the Linux desktop, and after months of struggling, instability and accessibility issues I'll admit I've been looking for stable, solid alternatives that are also powerful enough to get the job done and maybe even have something new to offer. As an old dog, sometimes it's really nice to be taught some new tricks!</p>
<p>If you've tangoed with Windows in the past, and found yourself struggling against its rather byzantine UI, I'd urge you to read on and see if maybe it's not time for another careful look.</p>
<p>Since choosing the right tools is all about your unique set of needs, I'll use those as categories to drive the discussion and showcase how Windows is doing a great job of satisfying them.</p>
<h3>In The Beginning, There Was The Command Line!</h3>
<p>One of the things that first drew me to UNIX decades ago was the shell. The ability to get pretty much ANYTHING I needed done by typing a few commands, and to create <strong>incredibly</strong> powerful mechanisms by stringing them together is downright intoxicating.</p>
<p>I still love me some Bourne shell, it's just as powerful today as it was decades ago. However <a href="https://docs.microsoft.com/en-us/powershell/scripting/overview?view=powershell-7.1">Windows Powershell</a> has some incredibly powerful paradigms of its own that are worth looking into.</p>
<p>In addition to things like object pipelines and desired state configuration that
the UNIX shell simply can't do, modern Powershell has creature comforts like <a href="https://ohmyposh.dev/">Oh My Posh</a> that make for a very comfortable work environment. Here's a screenshot of mine:</p>
<p><img alt="My Oh My Posh Prompt" src="https://www.feoh.org/images/OhMyPoshScreenshotSmol.png"></p>
<p>You can see that I get all kinds of nice status like exit code of last command, current git branch, current Python version and virtual environment, etc.</p>
<p>While Powershell is indeed a totally different beast from the UNIX shell I'm used to, its built in help for <strong>every</strong> command and understandable syntax make the learning curve feel rather shallow indeed.</p>
<p>Another gripe most UNIX users have when coming to Windows is that everything requires mousing around and futzing with a GUI, and it can feel like you're trapped in an endless series of installer screens to get even your basic working tools installed. Modern Windows obviates all that with <a href="https://www.slashgear.com/microsofts-winget-1-0-released-for-real-heres-why-you-want-it-01675425/">winget</a> a full fat package manager with tons of common applications already in there. Just <code>winget install git</code> and you're off to the races :)</p>
<h3>Before The Command Line, There Was The Terminal</h3>
<p>As anyone who's worked with Windows for a long time could tell you, in the old days, the Windows Console was pretty primitive. You were basically dealing with MS-DOS CMD.EXE with the barest modicum of window dressing. Needless to say, this is 2021 and that's just not cutting it.</p>
<p>Thankfully, there is a superlative alternative that's really come into its own in 2021 - <a href="https://github.com/microsoft/terminal">Windows Terminal</a>. Finally all the features anyone who's been working in the UNIX world have come to expect over the last 30 years are available on Windows as well. Multiple tabs, excellent terminal emulation, great theming and color support, and the ability to seamlessly handle different shells per tab. I regularly keep a Powershell and a WSL tab open for my work.</p>
<p>If you've ever struggled along with the old CMD.EXE, fighting for every cut, paste or insert, this really is a game changer.</p>
<h3>I Hate Meeces To Pieces! (Really, Don't Make Me Use the Mouse!)</h3>
<p>As someone who's partially blind and has fine and gross motor impairment, using the standard Windows Icons Mice and Pointers user interface is downright agonizing. I need to be able to launch apps with just a few keystrokes. On the Mac, <a href="https://www.alfredapp.com/">Alfred</a> fulfills this role admirably and adds a whole host of next level productivity power ups in addition to keyboard app launching.</p>
<p>A <strong>very</strong> recent addition on the Windows side that seems equally powerful and easy is Microsoft Powertoys <a href="https://docs.microsoft.com/en-us/windows/powertoys/run">Powertoys Run</a> feature. I can launch apps, bind keys to actions, and access system functions like sleep, restart and the like all 100% from the keyboard. Nice!</p>
<p>Another Powertoys addition that's frosting my Pop-tarts is <a href="https://docs.microsoft.com/en-us/windows/powertoys/keyboard-manager">Powertoys Keyboard Manager</a> which allows me to remaps the dread CAPS LOCK key to Ctrl so it's right next to my pinky as God Intended :)</p>
<p>This simple enhanment has been impossible with Windows forever without resorting to more drastic measures, so having it work pretty much out of box now is super sweet.</p>
<h3>Python - It Takes a Cast of Thousands to Raise a Platform</h3>
<p>If you'd uttered the words "Python" and "Windows" in the same sentence a few years back, the average Pythonista would have rolled their eyes or groaned and then proceeded to tell you a war story about how they had to spend weeks trying to get some critical module or other working.</p>
<p>Those days are just straight up gone. Microsoft and the Python community at large have poured countless engineer hours into making the Python ecosystem a truly first class experience under Windows. Virtual environments, poetry, and even tools for installing and managing command line scripts that integrate with the shell like <a href="https://pypi.org/project/pipx/">pipx</a> work just great under Powershell on Windows.</p>
<p>And if by chance you're coding something up that's native UNIX to its very core, Windows *<em>still</em> has you covered. Cue the Windows Subsystem for Linux!</p>
<h3>WSL - I See Penguins!</h3>
<p>With the avent of WSL2 and most recently <a href="https://github.com/microsoft/wslg">WSL-g</a> you really do have everything you need to seamlessly build, debug and run Linux programs on Windows, including those that require X/Wayland GUI support or sound.</p>
<p>It's not just some kind of compatibility shim, it's an <strong>actual</strong> Linux kernel running in Windows. The integration is so complete these days that you can run things like Docker within WSL successfully. That's a really big deal!</p>
<p>Also, most of the popular mainstream development tools like <a href="https://www.jetbrains.com/pycharm/">Pycharm</a> and <a href="https://code.visualstudio.com/">Visual Studio Code</a> have superlative support for deploying to and debugging in WSL built in.</p>
<p>The amount and quality of work Microsoft has put into this is truly impressive. And unlike the Mac, you're not actually using some oddball FreeBSD user space running atop the Mach microkernel, you're running 100% Linux. It's turtles all the way down.</p>
<h3>I Go Where The Innovation Is & Use What Works</h3>
<p>As a technologist, I'm proud of the success I've had in sniffing out pockets of high velocity, high value innovation in the technology landscape.</p>
<p>Years ago, I was running Linux when many people were either using DOS, pre OSX MacOS or super expensive prorietary vendor workstations like Sun's Sparc. Being able to have an honest to god UNIX environment on commodity hardware was like Prometheus's gift of fire to the mortals. It really was that big a deal.</p>
<p>I still think the Linux desktop has incredible potential, but for me the obstacles imposed by my disabilities and the lack of accessibility features can be a real buzz and productivity killer.</p>
<p>So here I am embracing a desktop that works, with an ecosystem that works and a rather large well heeled company pouring resources into bar raising and innovation.</p>
<p>I look forward to exploring and leveraging the incredible potential this platform represents. Stay tuned for more posts as I go!</p>The Eternal Novice Traphttps://www.feoh.org/posts/the-eternal-novice-trap.html2019-12-27T01:23:00-05:002019-12-27T01:23:00-05:00cpatti<section id="introduction">
<h2>Introduction</h2>
<p>It was the dawn of a new century in the tech world. We'd just survived the great Y2K scare which, for many of us, turned out to be nothing. I spent a memorably pleasant Y2K eve playing board games and sipping champagne at my company's East Cambridge office, enjoying the company of my co-workers. I felt like I was on top of the world.</p>
<p>Right around that time I encountered a book that would change the way I thought about computing. It contained a huge amount of overall incredibly positive and helpful advice. That book was <a class="reference external" href="https://pragprog.com/book/tpp20/the-pragmatic-programmer-20th-anniversary-edition">The Pragmatic Programmer</a>.</p>
</section>
<section id="the-trap-is-set">
<h2>The Trap is Set</h2>
<p>This book contains innumerable bits of incredibly useful advice. The pearls contained within its pages will help you build a successful career as a technology professional.</p>
<p>But I write this in the hope that you won't misinterpret one particular bit of advice like I unintentionally did. In some ways it hurt my career. Thankfully I became aware of it a few years back and am now headed in the right direction.</p>
<p>Here's the advice I used to hamstring myself:</p>
<blockquote>
<p>Learn at least one new language every year. Different languages solve the same problems in different ways. By learning several different approaches, you can help broaden your thinking and avoid getting stuck in a rut.</p>
<p><a class="reference external" href="https://en.wikipedia.org/wiki/The_Pragmatic_Programmer">The Pragmatic Programmer, 2nd edition</a></p>
</blockquote>
<p>This is superb advice for its time, when the majority of programmers spent their days coding away in a single language or two.</p>
<p>It's superb advice to this day for that kind of person. If you've spent years coding in Python, why not try your hand at something with a radically different paradigm? By doing so you'll learn new ways of solving problems.</p>
<p>But zooming back to post Y2K me, that picture didn't fit me at all. I'd started out as a sysadmin, learning a huge amount about the care and feeding of UNIX based systems. I'd done some simple scripting to automate administrative tasks, but nothing at all complex or strenuous. A little bit of shell, some Perl, and I had things humming along just great.</p>
<p>Only I took the advice literally, despite my total lack of mastery of any programming language. With wild abandon, I threw myself into every new programming language I encountered..</p>
</section>
<section id="the-bright-shiny-infinite-rabbit-hole">
<h2>The Bright, Shiny, Infinite Rabbit Hole</h2>
<p>I played with countless languages, FORTH, a myriad of LISPs. You name it, I played with it. If there was a new hot language on the scene you can bet I'd be downloading it and figuring out how to write Hello, World and a few other toy examples.</p>
<p>But that's as far as it went, because, if I'm honest with myself, playing with new toys doesn't feel like work. It's a shot of dopamine. It feels <strong>really</strong> good in the moment. You feel accomplished because now you can talk about $LANGUAGE along with the rest of the cool kids who are exploring it.</p>
<p>There are also external reinforcements for this behavior. By being able to talk the talk, you can appear smarter than you are. You can probably even answer surface level questions in job interviews which can, in the short term, help your career.</p>
<p>But not unlike living on sugar and caffeine, that short term buzz will wear off, leaving you feeling empty and, ultimately, like the emperor walking around with no clothes. You can talk the talk like a champ, and be up with the latest buzz, but in some corner of your mind you may recognize that your basic skills are fundamentally lacking.</p>
</section>
<section id="brush-your-teeth-eat-your-veggies-get-sleep-exercise">
<h2>Brush Your Teeth, Eat Your Veggies, Get Sleep & Exercise</h2>
<p>Thankfully, the fix is at least conceptually easy. Just <strong>stop doing that</strong> :) Pick a language that will become your daily driver, and focus on building your core skills using that language.</p>
<p>Build deep, featureful applications. Learn and exercise your skills using the full breadth of your language's ecosystem, and solve real problems using your language of choice.</p>
<p>For me, that language is Python. That's an easy choice because my day job is building infrastructure for a major cloud vendor and 90%+ of our tooling is written in Python. For the last few years I've promised myself to not learn any new programming languages until I become at least a Journeyman with Python.</p>
<p>You may find, as I did, that this is easier in concept than in practice. You may need some structure to help you achieve this goal. Everyone is different, so this isn't a one size fits all suggestion. I'll share some resources that may help.</p>
</section>
<section id="resources-to-help-sharpen-your-tools">
<h2>Resources to Help Sharpen Your Tools</h2>
<p>These days there is an embarrassment of riches out there, free for the taking to anyone with a computer and an internet connection to leverage. I'm just going to cover a few that I've found particularly helpful.</p>
<p><a class="reference external" href="https://training.talkpython.fm/courses/explore_100days_in_python/100-days-of-code-in-python">100 Days of Code with Python</a></p>
<p>If you're like me, having a free form set of exercises can be good, but adding some structure with definite time constraints and deadlines, even if you set them yourself, can be immensely helpful. This course was pretty much ideal for my needs. The idea is that you commit code every day for 100 days. This course uses that framework to take you on a guided smorgasbord tour of the incredibly rich Python ecosystem. The course introduces a particular topic or module and then has you build an interesting near real world application with it. I learned so much from this course that it alone has been a real boost to my career.</p>
<p>Completing a course like this can be a daunting task, especially while working full time. However I found the results are well worth the effort. Hopefully you can find something similar for your language of choice.</p>
<p><a class="reference external" href="https://exercism.io/">Exercism</a></p>
<p>Exercism is an incredible resource regardless of the programming language you work in. It's not just a set of practice exercises, but a community of people who'll help review your code and provide mentorship.</p>
<p><a class="reference external" href="https://projecteuler.net/">Project Euler</a></p>
<p>These are language agnostic problem sets that will stretch your skills and force you to really exercise your problem solving skills. I myself have only scratched the surface with these, and plan to delve deeper in the future.</p>
</section>
<section id="parting-thoughts">
<h2>Parting Thoughts</h2>
<p>I hope you'll find value in what I wrote here. I wish I'd had this article earlier on in my career. Maybe I can help someone avoid falling into the trap I did. To sum up:</p>
<ul class="simple">
<li><p><strong>Do</strong> learn new programming languages and paradigms, but learn them from a place of confidence and mastery with your primary tool of choice.</p></li>
<li><p><strong>Don't</strong> fall for the trap of perpetually chasing after the bright shiny thing that's hot right now. Recognize that what's new isn't necessarily better. Take what will meaningfully help you advance your career and let the rest flow by. There'll always be more tomorrow.</p></li>
<li><p><strong>Do</strong> keep having fun! You'll learn more quickly and retain more if you're finding enjoyment in what you do. Sometimes it means looking at things a little differently, but often that open mindedness can pay off.</p></li>
</ul>
</section>Vim Versus Emacs - Minus the Religionhttps://www.feoh.org/posts/vim-versus-emacs-minus-the-religion.html2015-07-15T00:00:00-04:002015-07-15T00:00:00-04:00cpatti<section id="vim-versus-emacs-minus-the-religion-1">
<h2>Vim Versus Emacs - Minus the Religion</h2>
<p><strong>[Note: I originally wrote this for</strong><a class="reference external" href="https://www.quora.com/Text-Editors/Which-is-better-Vim-or-Emacs-Why/answer/Christopher-Patti">Quora</a><strong>but am reposting it here with slight embelishment.</strong></p>
<section id="introduction">
<h3>Introduction</h3>
<div class="line-block">
<div class="line">In hard core technical circles, discussing the relative merits of</div>
<div class="line">these two editors is pretty much verboten. In the past, debates around</div>
<div class="line">this issue have actually become vicious (which is ludicrous when you</div>
<div class="line">think about it) and raged on for literally years. Devotees on either</div>
<div class="line">side would rarely listen to reason, and mostly everyone seemed to</div>
<div class="line">think it was an either/or situation. To be honest, I think that stance</div>
<div class="line">is utter rubbish.</div>
</div>
<div class="line-block">
<div class="line">I feel as if I'm uniquely placed to answer this one because I've been</div>
<div class="line">using both for about 25 years now. (15 with almost full time Vim and</div>
<div class="line">10 emacs).</div>
</div>
<div class="line-block">
<div class="line">First off, I want to slightly challenge your question. It's too</div>
<div class="line">simplistic and there can be no answer to it the way you asked it.</div>
<div class="line">Emacs and vi are both superlative editors for certain types of</div>
<div class="line">things - their strengths give them super powers in very different ways</div>
<div class="line">that lend them to solving some problems more easily than others.</div>
</div>
<section id="vi-vim">
<h4>Vi/Vim</h4>
<div class="line-block">
<div class="line">To my mind, if your goal is simply to edit text, Vim might be better</div>
<div class="line">suited to the task. Its modal editing lends itself to lightning fast</div>
<div class="line">text entry, and there is a nearly infinite potential growth curve for</div>
<div class="line">how its various commands and shortcuts can be efficiently brought to</div>
<div class="line">bear in navigating and moving text around.</div>
</div>
<div class="line-block">
<div class="line">Through the years, various extension technologies have been added to</div>
<div class="line">Vi (a-la Vim) that enable it to be extended in various ways, but in my</div>
<div class="line">personal hard wrought experience, there are limits as to how far you</div>
<div class="line">can push that extension before the both the editing paradigm and the</div>
<div class="line">mechanics begin to creak and groan under the weight of what you're</div>
<div class="line">trying to accomplish.</div>
</div>
<div class="line-block">
<div class="line">For instance, the straw that broke the camel's back for me was trying</div>
<div class="line">to get IDE like method and member auto-completion and refactoring into</div>
<div class="line">the editor. There are various solutions for this in Vim, but they</div>
<div class="line">either just plain didn't work, or if they did de-stabilized my Vim</div>
<div class="line">installation because they required the installation of C shared</div>
<div class="line">libraries that were a pain to build and install. There's nothing quite</div>
<div class="line">like having your editor dump core in the middle of a critical editing</div>
<div class="line">session to make you reconsider your choice of tools.</div>
</div>
<div class="line-block">
<div class="line">Note that the above scenario has virtually nothing to do, strictly</div>
<div class="line">speaking, with editing text. It's the result of trying to make Vim</div>
<div class="line">into an IDE, which it isn't.</div>
</div>
<div class="line-block">
<div class="line">As others have mentioned Vi/Vim also has the advantage of ubiquity.</div>
<div class="line">It's bundled by default on just about every UNIX system on the planet,</div>
<div class="line">and that's definitely worth noting.</div>
</div>
<div class="line-block">
<div class="line">A great resource for Vim users is <a class="reference external" href="https://www.vimcasts.com">Vimcasts</a></div>
<div class="line">and Drew Neil's excellent book <a class="reference external" href="https://pragprog.com/book/dnvim/practical-vim">Practical Vim</a>.</div>
</div>
</section>
<section id="emacs">
<h4>Emacs</h4>
<div class="line-block">
<div class="line">I personally think of emacs less as a text editor and more as an</div>
<div class="line">incredibly powerful programming environment hyper optimized for</div>
<div class="line">working with text - the upshot being that it also has very capable</div>
<div class="line">text editing features.</div>
</div>
<div class="line-block">
<div class="line">I know that sounds like I'm just playing with words but trust me I'm</div>
<div class="line">not. If you want to create the most incredibly powerful programming</div>
<div class="line">environment utterly customized to your every need, then Emacs is</div>
<div class="line">undoubtedly for you.</div>
</div>
<div class="line-block">
<div class="line">It excels at subprocess control, so for instance if you're programming</div>
<div class="line">in Python, emacs will run a Python interpreter for you inside the</div>
<div class="line">editor. Why would you want this you might ask? Because then you can,</div>
<div class="line">while you're coding, try bits and bobs of code out and actually run it</div>
<div class="line">and see how it works. Emacs can even run the Python interpreter on a</div>
<div class="line">remote machine and hook it into your editing session.</div>
</div>
<div class="line-block">
<div class="line">At the core of emacs is emacs lisp - elisp is at the heart of emacs's</div>
<div class="line">superpowers. It is the ONLY extension language available in emacs,</div>
<div class="line">but it can do just about anything. You can avoid learning elisp and</div>
<div class="line">still be very productive using emacs, but chances are if you're like</div>
<div class="line">most people you will get sucked in eventually as the lure of sanding</div>
<div class="line">the rough edges off of some mode or other becomes too great :)</div>
</div>
<div class="line-block">
<div class="line">You can, if you so choose, use emacs as your entire working</div>
<div class="line">environment - edit, code, chat, manipulate source control (like Git) -</div>
<div class="line">pretty much anything.</div>
</div>
<div class="line-block">
<div class="line">This is a common attack non emacs users make "It's not an editor. It's</div>
<div class="line">an operating system!" and I say they're right, but they're also</div>
<div class="line">missing the point :)</div>
</div>
<div class="line-block">
<div class="line">Excellent starter resources for Emacs users are - <a class="reference external" href="https://pragmaticemacs.com/">Pragmatic Emacs</a> and</div>
<div class="line">the book / website (both stellar) <a class="reference external" href="https://www.masteringemacs.org/">Mastering Emacs</a>.</div>
</div>
</section>
</section>
<section id="summary">
<h3>Summary</h3>
<div class="line-block">
<div class="line">I realize this is a long answer, but the question is nuanced and</div>
<div class="line">complex so hopefully the length is merited.</div>
</div>
<div class="line-block">
<div class="line">If you are mostly editing plain old text, or doing very light coding</div>
<div class="line">or maybe editing static configurations, or if you need your editor</div>
<div class="line">to be there by default everywhere you go in UNIX-land, then Vim is</div>
<div class="line">almost undoubtedly your best bet.</div>
</div>
<div class="line-block">
<div class="line">If your needs are more complex, and you find yourself pushing the</div>
<div class="line">envelope, asking IDE like things of your editor, or if you know off</div>
<div class="line">the bat that you're a hard core developer who dreams in code and</div>
<div class="line">demands the utmost in customization capabilities from your</div>
<div class="line">environment, then skip right to emacs.</div>
</div>
<div class="line-block">
<div class="line">Ultimately, ignore all the rhetoric and religion and figure out which</div>
<div class="line">will make you more productive - or do what I do and use them both! I</div>
<div class="line">use vi for super quick edits on servers and emacs for heavier editing</div>
<div class="line">or when I'm editing on my desktop / laptop.</div>
</div>
<p>Tools are just tools, use what makes sense.</p>
<p>[ <strong>Update 07/16/2015: My astute readers reminded me of</strong><a class="reference external" href="https://www.emacswiki.org/emacs/Evil">evil-mode</a>**
which can be seen as letting you have your cake and eat it too :) It provides startlingly complete vim compatibility inside emacs. It works great, I used it initially when I was making the transition from vi to emacs and can recommend it heartily.** ]</p>
</section>
</section>Yay and Boo all in one breath: The Amazon Kindle Development Kit (KDK)https://www.feoh.org/posts/yay-and-boo-all-in-one-breath-the-amazon-kindle-development-kit-kdk.html2010-02-07T12:13:00-05:002010-02-07T12:13:00-05:00cpatti<p>Amazon has finally come out with the details around their Kindle Development Kit (KDK) you can read the details <a class="reference external" href="https://kindlepublishing.amazon.com/gp/vendor/kindlepubs/kdk/get-content?id=200436000">here</a>.</p>
<div class="line-block">
<div class="line"><br></div>
<div class="line">This is absolutely great news for the J2ME development community, this is a mainstream device from a big name manufacturer where they can ply their existing skill set or port their existing apps.</div>
</div>
<p>However, I'm a bit disappointed. I realize that the Kindle is meant as a light weight device, but I have always found J2ME's I/O model to be rather cripplingly baroque in so many ways.</p>
<p>Looking over Amazon's APIDoc however, it does seem like they've built their own infrastructure atop J2ME, so perhaps they've made it easier and more pleasant to code for.</p>
<p>I'm torn between wanting to get in on the ground floor and not wanting to invest the time and energy in learning a technology (J2ME) which I feel has gone way past its expiry date.</p>
<p>Anyway, we'll see but I'll definitely be keeping a close eye on this one.</p>Is it just me...https://www.feoh.org/posts/is-it-just-me.html2009-11-13T14:18:00-05:002009-11-13T14:18:00-05:00cpatti<p>Or has the number of new programming languages been increasing exponentially of late?</p>
<p>I don't just mean the number of new languages being <strong>invented</strong>, because that's always been the case, but the number which are actually garnering a fair bit of tech buzz?</p>
<p>In the last few months, I've heard a LOT about Clojure, Scala, Factor, and most recently Google's Go.</p>
<p>I can't help but wonder if maybe we should stop inventing new programming languages and paradigms, and maybe focus on using the ones we have already more effectively and creatively.</p>
<p>Then again, maybe I'm just getting old :)</p>