1. 14

    I had to laugh (in a kind way) at this slide:

    https://talks.golang.org/2016/applicative.slide#13

    We have one in the Rust world, too, just the axes are different (Control vs. Safety):

    https://twitter.com/Argorak/status/738643796020301824

    1. 10

      It is interesting that the golang axes attempt to be accurate, where as the the Rust one is just the obligatory up and to the right (which may also be accurate, of course!).

      People in my very unscientific survey suggest that Go:

      1. is fun to program in
      2. isn’t perfect
      3. is productive
      4. is suitable for many scripting tasks

      Benchmarks suggest that Go is:

      1. pretty fast
      2. not as fast as C/C++
      3. often faster than Java
      1. 4

        i’m not a huge fan of go viewed purely as a language, but if you consider “fast and fun for humans” as a sum of language + dev tooling + deployment, they’re selling themselves short on that axis, if anything.

        1. 5

          3. is productive

          To a point. There is a lot of copying and pasting, a lot of “verbosity” for the sake of … not sure what, but the don't DRY out quote from one of the posted slides sort of explains it.

          I like go for small projects, for large projects with lots of code it becomes an unrefactorable mess.

          1. 6

            Copy and paste can be productive. Go lacks a lot of the generalized abstractions that make it a good language, but in my experience it’s as fast, or faster to write in Go vs JavaScript or Python.

            I don’t defend Go because I like it, mind you. But, I can’t ignore the speed in which I and others have developed pretty high quality, and scalable stuff with it, either.

            1. 3

              I’m somewhat surprised by the existence of large projects written in go.

              The language is <10 years old - either someone wrote a lot of code in a very short period of time, or we have different definitions of large (my first job after uni had >1million SLOC and ‘unrefactorable mess’ did not begin to cover it).

              1. 2

                Kubernetes is in that range but i may have counted dependencies.

                edit: 700k lines without dependencies, 1.2 million with them

                1. 2

                  There’s no clear definition of “large”. 1 mloc might be considered “very large”.

                  https://en.m.wikipedia.org/wiki/Programming_in_the_large_and_programming_in_the_small

                  1. 1

                    Ours is not large but we’ve had some transitioning of some of our services at gitlab to Go

                  2. 2

                    Go offers several ways to avoid repeating code. Each has its own tradeoffs. Sometimes copy and paste is the most appropriate, but its hardly the default.

                    Re: large systems. I’m just getting there with Go and to remain effective I’ve rewritten a few packages multiple times. I see no evidence unrefactorable messes are inevitable.

                  3. 3

                    Our startup switched to Go almost a year ago and we came to the same conclusions.

                    Can confirm that 4. is indeed very true, we were surprised by how easy it can be to output scripts that are still maintainable/readable and being written on a short timeframe.

                    Regarding 1. and 3. our feeling is that it clearly depends on what is being implemented.

                    As soon as the project requires a lot of business logic, in our experience, expressivity became clearly a problem. We ended with a lot of boiler plate and some rather boring code but it still executes pretty fast so it’s a fair tradeoff. Maybe with more experience this will come better, we’ll see. If anyone could point me toward resources addressing this, that’d be awesome ! :)

                    On the other hand, when it comes to writing stuff that needs to be fast and mostly does one critical thing, the results are speaking for themselves, code is simple and concise and pretty damn fast. It’s not that we couldn’t have written it in C, it’s just that it’s really comfortable to do it in Go and quickly yield clearly solid results (for us).

                    Still our team feel some frustrations regarding the lack of abstractions, but we’re solving this from now on by using Go mostly in the latter scenario.

                  4. 9

                    There’s also Simon Peyton Jones' chart, where the axes are “usefulness” and “safety”.

                    1. 3

                      <3. I love how this is obviously from the time where STM seemed to be the topic of the day.

                      Also: I have a horrible, horrible memory for faces. Is that Erik Meijer in a shirt with just two colors?

                      Also (II): Interesting that the idea of bringing SQL stuff back into the programming languages has worked out.

                      1. 8

                        This is a favorite video of mine, for a couple of reasons:

                        • The acknowledgment that languages readily steal from each other
                        • The fact that these language researchers/developers are friendly with each other (it’s easy to get into this world of language mono-culture where your language is the one true language and the other languages are evil. It’s good to remember that this is silly)
                        • No one puts down any other language (in fact, Simon Peyton Jones is quite self-deprecating toward Haskell, in calling it useless)
                        1. 8

                          As a real world example of #2, I presented at the same conference as this presenter, and he came up before mine to introduce himself, say hi, and ask if we shouldn’t grab some lunch sometime since we both live in NYC. I was very humbled. I wouldn’t say the Rust and Go teams know each other super well, but we’re extremely friendly and respectful of each other’s work, generally speaking.

                    2. 3

                      This slide looks like it was written by someone who doesn’t even know C++. They put Go way above it, but put C only barely below it.

                      This is completely wrong; it should be the other way around. Go is only marginally easier than C++, while C++ is much easier than plain C.

                      1. 4

                        You are aware that this is a slide of a rust core member? They probably know C and C++ quite well.

                        All slides are marketing material and the grouping isn’t scientific.

                        1. 1

                          C++ is much easier to write than C is but not necessarily to read (other’s people’s code). Because of how verbose Go is, it is much easier to read other people’s code.

                      1. 6

                        OS X is increasingly not resonating with me either. The only thing keeping me on it is mostly inertia and that the hardware is so good. Shit Just Works. But I’m considering moving to Windows in my next purchase and just run everything in VMs. Currently the only applications I require running on the host OS is a web browser, terminals, and emacs. I think Windows can probably do that well enough.

                        I mainly want to go to a first class citizen on a laptop (Windows) for driver support, unfortunately.

                        Does anyone have any thoughts on this? Arguments for going LInux entirely?

                        1. 11

                          I bought a top of the line macbook pro 15" a few months ago and I can’t say that “Shit Just Works” has been my experience at all. It’s been ok but there’s a lot that’s just buggy or badly designed about it.

                          • The keyboard scratches the screen when carrying it in my bag. According to the forums that’s normal - macbooks have “always done this”. When I pay for the fanciest screen on the market I don’t expect it to be self-scratching.

                          • The bluetooth randomly fails and needs rebooting.

                          • The Wifi reports high signal strength even when it’s marginal. This flaw is compounded by its wifi range not being particularly good either, so it reports full signal even when it’s so marginal that the network is often unavailable.

                          • The OS occasionally crashes. Not often enough to be a huge problem but linux is much more reliable.

                          • The “magic mouse” is an ergonomics disaster with terrible battery life. You end up clutching on to the hard edges of a piece of flat plastic. It looks great, sure, but it definitely wasn’t designed for humans to use.

                          Overall I’d rate it as pretty average in terms of problems. I’d just expected better than average when paying top dollar.

                          1. 8

                            I came to the conclusion recently that I’ll replace my existing work 11" Macbook Air with a Thinkpad when the time comes. I recently bought an old X220 to run Arch to see if I could use Linux day to day and I’ve been incredibly happy with the results.

                            Currently the only piece of software that we use at work that’s OS X specific is [Sketch] (http://bohemiancoding.com/sketch/), which I can see us ditching as time goes by. I’m also perfectly happy to be handed a PSD that I can open in GIMP in that particular case.

                            Reading this post make me realise just how frequently I run up against OS X oddities, in particular the amount of times that system daemons start hogging resources big-time. When the majority of my time is spent in Vim and iTerm 2 there’s no need to use OS X and have to work around its intricacies.

                            1. 4

                              I recently bought a T440s, and I run Debian Jessie, and it’s wonderful. Only downside is the trackpad, and I had to use wired Ethernet to grab some non-free wireless drivers…

                            2. 4

                              Why not stick with the apple hardware, keep osx for the battery life and device support, and dev in a linux vm?

                              I recently started dual booting gentoo and osx on my macbook pro, and I’ve really been enjoying it. I play with a lot of languages, libraries, and tools, and I benefit from gentoo’s system of being able to specify what kind of support you want compiled into your tools in one place, and have your new things support each other right away. It was interesting to get my company’s vpn client to work, and its instability is why I am usually on OSX while at work, but at home I’m usually on gentoo. My home desktop dual boots arch and windows, because I don’t tinker with it as much and I just want it to work in a generic way with low effort. I’ve heard good things about nixos, and that may be the next one I play with.

                              1. 15

                                I would second that. It seems silly to throw away good hardware with a tightly integrated OS for a laptop designed for Windows that will inevitably have a crappy trackpad, poor battery life, and probably a cheap screen. You can use VMWare Fusion full-screened and not really have to deal with OS X constantly changing underneath it. I dual-boot OpenBSD on my MacBook Air and have VMWare Fusion setup to be able to boot OpenBSD directly from its raw partition, so that I can boot it virtualized or on real hardware with the same setup.

                                I’ve used dozens of different laptops with OS X and OpenBSD and I keep coming back to MacBooks. IBM, Lenovo, Toshiba, Sony, ASUS, Samsung, and probably some others I’m forgetting. The old ThinkPads (X40 era) were great but unfortunately they’re too slow to use these days and the screens are very low resolution. The X220 and newer from Lenovo were pretty thick and ran hot and loud, although they did have an IPS screen available. The original X1 carbon was nice, but its screen was very low resolution. The new one has this abomination for a keyboard. The ASUS UX21A was a good PC-counterpart to the 11" MacBook Air but its keyboard annoyed me enough that I got rid of it.

                                When switching to a non-Apple laptop, you might not think about all the little things that make Macs such a well designed product (in terms of hardware). The small footprint, the light weight, the silent fans, the low amount of heat generated, the lack of stupid LED lights that are just there to make it painfully obvious that the machine is doing stuff, the lack of gaudy branding, the lack of Intel stickers!, the high quality displays (with little gloss, at least on the MBA), good keyboards and trackpads, and decent speakers and microphones. And don’t forget the power adapters. Apple power bricks are everywhere in case you forget yours, and they wrap up nicely and have MagSafe. PC manufacturers still haven’t figured out how to get rid of those big long black bricks with dual cords that need velcro to wrap up.

                              2. 3

                                I also find some things about recent OSX versions to be a bit irritating/galling, but on the whole it isn’t too bad. I moved away from linux because while it worked great as a desktop and a server², on a laptop it was a rather really awful experience.

                                That was maybe 6 years ago, and you would think in the interim things would have gotten much better. Reading various articles/comments/posts in the interim, it seems this has not improved as much as I would have hoped – the blame likely lay at the feet of the hardware manufacturers more than the kernel and distro devs, but who knows.

                                External pressures aside, a new operating system generally has to be more than just a little better for users to switch. Not just a different set of pain, but either significantly less pain, or some facility that is so much better that it “eats” the entire cost of switching.

                                OSX had that when I switched – really great hardware, better font rendering, laptop suspend worked reliably, wireless worked, bluetooth worked, screen brightness controls worked, audio even worked, apps installed easily without having to search for random libs, a more uniform look (no gtk/qt disparity) and conventions, had unixy bits available (terminal, bash, vim, etc).


                                Running Windows with something like FreeBSD in a VM does sound interesting, but I spend so much time either in a terminal or a web browser, that I don’t know that Windows would add much value for me. I also haven’t found many of the changes in the last few versions of OSX to be that awful truth be told.

                                If you have mac hardware though, try running windows on it and see how it goes? A couple guys at work do that, I hear that works rather decently.

                                ²: Have since switched to FreeBSD for person stuff. Still use linux at work though (not my choice)

                                1. 1

                                  @apy @robdaemon Apart from your web browser, terminals and text editor, is there any other applications you run in the native host operating system (Windows in your case)? For example, what do you use for your email? Do you use a git repository viewer (like gitk)? Do you native apps like Skype/HipChat/etc.? Do you use screen sharing apps (like join.me)? Do you use some kind of office suite (like LibreOffice)?

                                  1. 2

                                    I occasionally use things like Skype or Google Hangouts, but I expect them to be well supported in Windows. The main thing that I like about OS X is being Unix at the core so using it is nice to jump down to a command line. But I think for my needs cygwin + putty cygwin would work well enough for my needs. I think I would mostly use Windows as just a virtual machine host.

                                    1. 1

                                      Cygwin is not as nice as a real UNIX environment by a long shot. And putty is such a pain compared to regular ssh. Maybe I use ssh more than the average person but I can’t stand putty.

                                      I would use Linux or FreeBSD, except OS X has amazing battery life, and wifi drivers that work beautifully. It also doesn’t hurt that it’s pretty.

                                      1. 1

                                        I would only use cygwin enough to hop into a VM somewhere or the occasional running around my Windows system with tools I know. I’ve used that setup before and it was acceptable. The main issue I have right now is I just do not enjoy using OS X at all. I feel it is getting in the way significantly more than helping me.

                                  2. 1

                                    Done the switch two years ago, for similar reasons.

                                    I initially started by having a good fat desktop computer running VMS then switched completely by replacing my old macbook pro (bought the biggest T430 I could build).

                                    The rule on my setup is, nothing but chrome, firefox, steam and a VM soft is installed (plus some minor softs, like spotify). I do everything inside my VMs. Initially, I was running my VMs headless and using putty to ssh on them. It’s great and consume less resources. But Putty is really clunky and I like having a tabbed WM so I nowadays mostly work in fullscreen on a linux VM running Xmonad.

                                    Honnestly, it works great, battery life is really good, it feels great to be able to pause your whole work environment on friday evening then reopen it on monday morning like nothing happened :)

                                    Overall, it’s the best of both worlds, Win 8.1 is really stable and you got your unix environment. The only issue I can speak about is that you sometimes encounter problems you’re not used to (as an osx/unix user):

                                    • incorrect filenames in a phone backup causing the files relocating service to run amok (100% disk usage, 30 minutes after booting)
                                    • an update in win 8.1 broke usb storage, I couldn’t access my nexus’s files while plugging it. Had to manually delete the incriminated driver.
                                    • vmware going nuts while resuming the VMs after the laptop was sent to sleep (happened once or twice).

                                    None of these issues are that much hard to solve, the issues is simply you’ll have to browse shitty support websites with ads everywhere to decipher some obscure tutorials to solve your issue. The solutions are usually straightforward, it’s just a matter of knowing where and how to find them. It’s the exact opposite of Freebsd, where you just go straight to the handbook.

                                    What I miss the most is the slickness OSX have, but well, we cannot have everything.

                                    1. 2

                                      I initially started by having a good fat desktop computer running VMS

                                      blinks, re-reads, oh, right.

                                    2. 1

                                      The sentiment in this article resonates with me as well (just ask my co-workers). In the last several months I’ve been reduced to ranting and raving every day I’ve used my Macbook Pro (Retina 13). I was a big Apple fan but that has change after the last couple releases of OS X. When I work from home I work on my Windows gaming PC (doing all my work in a vm) and I am rarely unhappy. I’m not sure if it’s because the laptop is underpowered or if things have just gotten worse and I’m at my breaking point with the OS. I have fantasies of getting a nice Lenovo laptop and just converting completely over but I fear I would just be as frustrated with the hardware. What’s really holding me back is that we have Apple Thunderbolt displays at the office and they only work with Macbooks and OS X.

                                      1. 1

                                        What’s really holding me back is that we have Apple Thunderbolt displays at the office and they only work with Macbooks and OS X

                                        The Thunderbolt display will work with Windows, including all the port expansion functionality, but I can’t speak as to how well it works with non-Apple hardware.

                                      2. 1

                                        I’d argue for Linux, or rather for FreeBSD with the way Linux is going these days. It works and gets out of your way. Sometimes there will be a problem, but it’s a problem that you can fix once and for all, and understand why you’ve fixed it. It’s wonderful to be able to upgrade my OS without worrying what’s going to break this time.

                                        Anything *nixey where you can choose window manager etc. is going to be much more configurable than OSX/Windows; watch the way an experienced Xmonad user works. (I don’t use it myself, but if you’re an emacs person that kind of customizability presumably appeals?)

                                        ZFS is very nice, more mature than the alternatives with similar functionality, and is a first-class citizen on FreeBSD.

                                      1. 6

                                        I’m continuing to work on my PureScript book as usual. This week is the chapter on monads and interacting with the browser.

                                        1. 3

                                          Just discovered your book thanks to your comment :) Well you just sold one :)

                                        1. 2

                                          For work, some classic Rails app related to airlines, not that fun so far be it’ll become much more interesting when we’ll start crunching big amounts of data.

                                          On the hobby side, I slowed my Clojure readings and now focus on coding instead. I started building some Rails backend with a Clojurescript frontend. So far it’s really fun to code, Om and Clojurescript make the front end much more interesting and meaningful than it used to be. I could do the backend in Clojure instead of Rails but it’s so damn easy to build a basic backend when you’re used to Rails and it allows me to focus on client-side in the meantime.

                                          It also allows me to spark interest for Clojure in my environment, which is mostly choosing Rails + AngularJS for every project no matter what.

                                          1. 1

                                            I find OSTs from games I played during my childhood or teenage years really great to code.

                                            If I’m under pressure or really focused on some tedious problem, calm and funny tracks works wonder to calm me down and help my focus. Having already listened these for hours helps me getting to the zone :)

                                            https://www.youtube.com/watch?v=mGK3usiX31s Secret of Mana

                                            https://www.youtube.com/watch?v=HtYEt0H1Wuk Legend of mana

                                            https://www.youtube.com/watch?v=Gumt8xfnspk Chrono Cross

                                            https://www.youtube.com/watch?v=BA6HpFfsFxY&list=PLCB5EC0C5E1947BF4 Xenogears

                                            If I need to wake up my brain or maintain strong focus while being tired, I usually go for fast paced action games. Melodies are usually mind drilling and stick forever in my head, as they used to be.

                                            https://www.youtube.com/watch?v=tBWl9p0fH28 Megaman X

                                            https://www.youtube.com/watch?v=MPjvRddcECA Double Dragon 2

                                            https://www.youtube.com/watch?v=CrF3WPi_7uI Street of Rage 2

                                            https://www.youtube.com/watch?v=dOxtw0a8Fio Valkyrie Profile

                                            Fun thing is, I usually listen the first group to think or read code, then the second one to implement :)

                                            Both groups bring me reassuring thoughts and positive emotions. I found it to be probably the best thing I’ve ever tried to handle whatever stress or anxiety work can cause (freelancer here).

                                            1. 4

                                              As steveklabnik mentioned ActiveRecord has made it easier to execute trivial SQL queries and immediately have them returned as objects. I agree an ORM can get a little frustrating when you want to start performing complex SQL queries but for the most part an ORM is highlight beneficial.

                                              I find ORMs still overly useful in basic web requests, if I need to show a single User or multiple Posts the gains over a simple User.find(params[:id]) and Post.top_ten outweigh the supposed burden of an ORM. I didn’t have to worry about constructing a maintainable SQL query and converting the DB response into a maintainable struct; all I had to worry about was moving the model down as a view model into the view.

                                              There should not be such hate around ORMs, instead there should be better education of when an ORM is awesome and when it’s time to take matters into your own hands.

                                              1. 3

                                                While I understand why people describe ORMs a failed abstraction, I strongly agree with you. ActiveRecord provides a usable solution out of the box, that fits common requirements for web apps.

                                                ActiveRecord and probably most of others ORMs are clearly leaky abstractions. SQL concepts are everywhere, just hidden from plain sight, waiting to bite. Imho the majority of serious Rails developpers are at least able to read and write plain SQL from time to time. If it gets complex, most of those I’ve met and myself included just dive in the docs, trying to refresh memories about what is needed.

                                                This leads me to think that AR was designed with that fact in mind, to use it efficiently people still need SQL notions as AR don’t even try to hide that stuff. It just provides a convenient way to handle common queries. I can’t speak for the others big ORMs like hibernate since I haven’t used them in a long time but I doubt they were designed in that way.

                                                AR in that case, still is a leaky abstraction, but it works wonderfully in most situations. From what I’ve seen, the biggest issue is usually the developer not knowing AR’s limits and keeps using in a case it brings more harm than good.

                                              1. 2

                                                “Most methods have "void” parameters and return “void”. Everything goes via global variables."

                                                This one is surprising, I wonder what pushed Ken to take that design decision.

                                                1. 3

                                                  I’ve recently shied away from using LaTeX, it simply doesn’t make sense for someone who, like me, publishes most of their documents online. On top of that, even for printed documents I’ve been increasingly writing on my iPad, an platform where LaTeX hasn’t really gotten a foothold. Lastly, I found using custom fonts with LaTeX to be a royal pain in the behind, it seems if you’re not a fan of Computer Modern you’re really out of luck.

                                                  1. 2

                                                    It really depends where you’re applying. Back four or five years ago while I was still in my studies, crafting a Latex CV or Latex letters served me well when I applied to my engineering school and internships. Each time the recruiters mentioned the Latex document I sent them.

                                                    Latex is immediately recognizable, it can be one of the little things that can grab attention in a stack of hundreds CVs. But this makes sense only in a context where Latex is known and valued.

                                                    1. 1

                                                      It doesn’t have to: http://kieranhealy.org/vita.pdf