1. 10

    Meh, I find this line of argument unconvincing… certainly using a specific toolset, could serve as a good basis for experience. Would you hire someone who has only done web development (and maybe has some experience with algorithms) to maintain a legacy COBOL system, optimized and written exclusively for some 40 y/o mainframe? It might not be a common example, but is is a kind of ad absurdum refutation in my eyes of the generality that the author makes. A more everyday example would be if you need to write some efficient system critical component on, let’s say a unix system, it’s certainly better to someone who has read alot about unix, has already wirtten utilities, knows the system calls and the advantages and disadvantages of libraries. Writing a physical simulation? I would guess that a stable background in mathematics, computational science and small hardware optimisations (eg. ++i vs i++) would come in more in handy than knowing how to position images on a website. And to not insult web developers, they have a tremendous advantage agains all the previous examples, and if one is already making the economic argument (think about the jobs!), speed and efficiency certainly seem important.

    All in all, one might not be ones tool, but one has ones experience, expertise and is probably more fit for some tasks than others, even if it’s only because of ones interests.

    (and the editor question seems to be quite perpendicular to this issue. This is a tool, but you can prefer one over another without making this an issue about identity. You just might be more used or find it more comfortable to write dd vs C-a C-k. Seriously levating this to the level of identity shows nothing more than a personal “shallowness”)

    1. 2

      I’ve worked in multimedia CD-ROMs. Then websites. Then software for airlines, with a lot of distributed systems stuff. Then just distributed systems. And now I’m doing image processing for gene sequencing, and dredging up memories of math classes I haven’t used in 18+ years.

      I’ve written production code in 6 different programming languages along the way.

      It is easier to stick to things you know, yes, but you don’t have to if you don’t want to.

      1. 1

        If you don’t mind me asking how’d you get into writing software for airlines?

        1. 3

          Got a job at ITA Software, which built the flight search engine powering many (a this point most?) airline websites, Orbitz, and these days Google Flights. We also built an airline reservation system, which was launched and then canceled by Google a few years after they bought ITA.

          There’s a still a whole team at Google working on this.

          Other companies are the big GDSes: Sabre, Amadeus, etc..

    1. 21

      I would go one step further–I only grudgingly sign NDAs and assignments of invention too and would prefer if they weren’t there.

      This single issue is the thing that most makes me think we need collective bargaining and unions.

      Given the MO of modern companies, our ideas and skills are all that we have.

      1. 8

        Yeah I don’t think i’d work anywhere that did Assignments of invention. I just don’t think I could be paid enough to make me give that up. I once signed a noncompete though but it wasn’t this restrictive, it only applied to business that were making the exact same kind of product (Laboratory information Management Systems).

        1. 7

          When I joined my last company they had an assignment of invention section in their paperwork, but provided a place to list exemptions. I listed so many things on that form: github side projects to theoretical ideas I’d been kicking around. When I handed in the packet to HR they didn’t know how to handle the fact that I actually filled that stuff out. They ended up removing the assignment of invention section completely.

          I see a distinction between companies that prey on their employees and those that build in language and terms like this because legal told them to, or it’s “boilerplate”. Nether is acceptable and in many regions that take workers’ rights seriously they are explicitly illegal. I don’t see that happening in the US anytime soon, though.

          If it’s important to you, don’t sign. If it’s important to you and your company is a bunch of idiots, change the contract before you sign it and watch them blindly put a signature on it. Who knows, maybe you’ll end up owning all their IP instead.

          1. 0

            I can definitely understand why a company would want you to sign an assignment of invention and I don’t think they’re inherently good or bad. They’re just a trade off like anything else. If you really want to start your own company one day or side projects are really important to you than that’s something to consider strongly before signing an assignment of invention. Just like flexibility would be something to consider before taking a job if you really wanted to be able to take off work, with no advanced notice, to surf if the waves happen to be good and then make up those hours later.

            1. 11

              Safety bars on looms and e-stops on lathes are a trade off like anything else…

              This is a local minima of error that companies are stuck in due to investors and lawyers (and greedy founders) trying to cover their own asses.

              It’s basically become industry standard, but seeing as how we’re all getting screwed in compensation (giving the growth we enable) compared to older days the bargain no longer makes sense. Further, the troubling trend is “Well, it’s probably no big deal to work on , just let us know and/or we don’t care anyways” is basically living with a gun to your head.

              If it is such a non-issue that most companies will overlook it, fucking leave it off the conditions of employment. If it is such an issue, compensate the engineers properly.

              1. 3

                I think we need to create a list of businesses that do this so that I can avoid ever applying to them and also ones that don’t do this so that I can weigh applying for them.

                1. 1

                  Safety bars on looms and e-stops on lathes are a trade off like anything else…

                  Apples and oranges. Those safety features don’t really affect the employer, but they have a huge effect on how safe the job is for all of the employees that use looms and lathes. Assignments of invention do have an effect on the employer and if you happen to be an employee without any aspirations of starting you own business then they don’t really affect you. Even if you do have that aspiration, a good company will be more than happy to stamp prior discovery paperwork to approve side projects that don’t have anything to do with the company’s area of business so an assignment of invention will only affect you if you want to compete with your employer.

                  Edit:

                  If it is such an issue, compensate the engineers properly.

                  If you compare the software engineering salaries with those of other fields it appears that we are compensated for signing non-competes and assignments of invention. Nurses, for comparison, are also highly educated salaried workers but they make on average $20,000 less per year then software engineers [Source] [Source]. It is entirely possible that the gap in pay is a result of a high demand for and low supply of software engineers. But there is a high demand for and low supply of nurses as well.

                  1. 8

                    a good company

                    Where, where are these good companies? “Not all companies”, indeed!

                    There is no upside to for the employer to do this once they have the paperwork in hand, and relying on the charity/largess of a company is foolish–especially once belts start tightening. Even companies that aren’t terrible can often punt forever on this sort of thing because of limited time to devote to non-business issues, because legal’s job is to provide maximal cover and push back on anything that might create risk, etc.

                    I suggest that the overall tone of how employee engineers are viewed, for the good of all engineers, needs to change. Hell, most of the innovation people claim to care about so much would be strangled in the crib under the agreements that are common today!

                    1. 3

                      Assignments of invention do have an effect on the employer and if you happen to be an employee without any aspirations of starting you own business then they don’t really affect you.

                      And without any intention of ever contributing to open source, and without any intention of ever writing an article or a story or a book, and without any intention of ever painting a painting, and without any intention of ever singing a song, etc., etc. (Ever assignment of invention I’ve ever seen has covered any and all copywritable works, not just code. Most have tried to claim assignment of works created before employment began.)

                      1. 1

                        Ever assignment of invention I’ve ever seen has covered any and all copywritable works, not just code. Most have tried to claim assignment of works created before employment began.

                        That is an entirely different story. The assignments of invention that I’ve seen strictly pertain to ip related to the company’s products and services, during your period of employment with the company. Although they have all asked for a list of prior work as a practical means of proving that any such ip of yours was created before your time of employment. That said, my comments above were made with that understanding of what an assignment of invention is.

                        1. 6

                          “Related” is way too open-ended for my comfort. If I contribute to an open-source project at night that is written in the same language I use at work, is that related? What about if they’re both web applications? What if they both use the same framework? If I write healthcare software during the day and I want to write a novel where somebody goes to the doctor, is that related?

                          In the contracts I’ve been presented with it’s been explicit that any work done prior to employment with the company that is no on your list of prior inventions becomes the property of the company. I’ve been programming since I was 12; there is no conceivable way I can list every piece of code I’ve written in 20+ years (much less other forms of copywriteable expression).

                          I have hired lawyers on two occasions to review assignment-of-invention contracts with provisions like these and on both occasions the advice I got was that “related” is pretty much a blank check for the employer.

                          1. 3

                            The ones I’ve seen (and signed) have been restricted to inventions created at work or on company equipment, which amounts to roughly “we own the things we’re paying (or providing infrastructure for) you to create”. Within the context of capitalist employment, I think that’s essentially reasonable.

                            1. 2

                              The fuzzy bit is, when you’re a salaried worker who is remote, what exactly is “company equipment”? What is “at work”?

                              How many of us have, in an evening say, made a commit to wrap up a thought after dinner from our laptops or desktops?

                              1. 3

                                If you’re a salaried remote worker, the company should be providing your work machine, which is either a laptop you can take with you, or a desktop that you remote into. If you’re providing all the equipment out of pocket, why are you on salary, rather than working as a contractor?

                                The only exception I could think would be a very early stage startup, but in that case you’re probably coming from a place of having a better negotiating position anyway.

                                I’ve worked remotely for 3 jobs, and have always been provided a development machine, and have done my best to avoid doing anything that is strictly a side project on it for that reason.

                                1. 1

                                  One of the selling points vendors of separation kernels pushed was separation of Personal and Work on one device (“BYOD”). They mainly pushed it under the illusion that it would provide security at reduced costs on consumer-grade devices. They also pushed it for GPL isolation to reduce IP risks to them. Your comment makes me think that can be flipped: use of dedicated, virtual work environment for (typical benefits here) with additional benefit of isolating I.P. considerations to what’s in the VM. If you want something generic, do it on your own time in your own VM just importing an instance of it into the work VM and/or its codebase. Anything created in the work VM they or you can assume will belong to them.

                                  I’m ignoring how time is tracked for now. Far as clarity on intent of I.P. ownership, what do you think of that as basic approach? Spotting any big risks?

                              2. 1

                                I’ve never consulted a lawyer so I’ll concede to you on this. Thank you for posting about your experience!

                          2. 2

                            If safety equipment did not affect the employer, then why did it take so long for employers to adopt them? Why did they fight so hard against them?

                            And if it isn’t a big deal to a good company to make exceptions, why bother with the clause?

                            If developers are being fairly compensated for these burdens, why do we still hear about a shortage of devs?

                            1. 0

                              If safety equipment did not affect the employer, then why did it take so long for employers to adopt them? Why did they fight so hard against them?

                              The same reason anyone makes a fuss when you force them to do anything. People don’t like to be told what do to. Add to that the slow moving nature of large organizations and there is going to be a huge fight to get them to do absolutely anything.

                              And if it isn’t a big deal to a good company to make exceptions, why bother with the clause?

                              Because trusting every employee to be honest about signing over ip to anything they’re working on that is related to the company is not practical and it opens up the company to a huge amount of liability. If you don’t bother with the clause what happens if you inadvertently use your ip your day to day work, fail to notice, and fail to sign it over?

                              If developers are being fairly compensated for these burdens, why do we still hear about a shortage of devs?

                              Because there is a shortage. Paying more isn’t going to magically create more senior devs. It’ll increase the amount of people that get into the field (and it has) but there is still going to be a large lag time before they have the experience that employers are looking for. That said, if you compare the salaries of software developers to the salaries of other professions with shortages you’ll see that software developers make more. So we might not be compensated as much as you would like, but we are being compensated.

                              1. 5

                                It took so long to do it because it costs money to replace your lathes with ones with E-Stops. It has nothing to do with being told what to do or being slow. Corporations can actually do things quite quickly when there’s a financial incentive to do so. They struggle to do things which they have a financial disincentive to do. This is precisely why unions are necessary for a healthy relationship between corporations and employees.

                                1. 2

                                  It has nothing to do with being told what to do or being slow.

                                  It’s both. Companies regularly waste money on stuff that doesn’t benefit the company or refuse to switch to things with known benefits that are substantially different. These are both big problems in companies that aren’t small businesses. They’re also problems in small businesses, but often in different ways. Egos and/or ineptitude of people in charge are usually the source. On programming side, it’s why it took so much work to get most companies to adopt memory-safe languages even when performance or portability wasn’t a big deal in their use cases. Also, why many stayed on waterfall or stayed too long despite little evidence development worked well that way. It did work for managers’ egos feeling a sense of control, though.

                                  Can’t forget these effects when assessing why things do or don’t happen. They’re pervasive.

                                2. 4

                                  I don’t think a ‘company’ has any feelings at all. I think companies have incentives and that is it, full stop. The people within a company may have feelings, but I think it is amazing the extent that a person will suppress or distort their feelings for money or the chance at promotion.

                                  I would be surprised if liability was what companies had in principally in mind about ip assignment. I suspect the main drivers are profitability and the treat of competition.

                                  In terms of compensation, I don’t think anyone is saying programmers are poorly compensated. The question is whether non-competes and and sweeping ip assignments are worth it. Literally everyone who works is compensated, of course it is reasonable to dicker over the level of compensation and the tradeoffs involved in getting it. …

                                  I think there is a tendency to feel that the existence of an explanation for a company’s behavior is sufficient justification for it’s actions. Because there is an explanation, or an incentive for a company to do a thing has little to no bearing on whether it is good or right for a company to do a thing. It has even less bearing on whether a thing is good from the perspective of a worker for the company.

                                  If there is a shortage of software developers, and they are worth a lot of dollars, it is in the interest of software developers to collectively negotiate for the best possible treatment they can get from a company without killing the company. That could include pay, it could be defined benefits, it could be offices with doors on it, or all of the above and more.

                                  There is a strong strain of ‘the temporarily embarrassed millionaire’ in programmer circles, though. It seems like many empathize with the owner class on the assumption that they are likely to enter the owner ranks, but I don’t see the numbers bearing that assumption out.

                                  1. 6

                                    If there is a shortage of software developers, and they are worth a lot of dollars, it is in the interest of software developers to collectively negotiate for the best possible treatment they can get from a company without killing the company.

                                    And as you know, employers colluded to secretly and collectively depress labor wages and mobility among programmers in Silicon Valley (Google, Apple, Lucasfilm, Pixar, Intel, Intuit, eBay), on top of the intrinsic power and resource advantage employers have over employees, further underscoring the need for an IT union.

                                    https://www.hollywoodreporter.com/news/pixar-lucasfilm-apple-google-face-suit-285282 (2012)

                                    https://www.theverge.com/2013/7/13/4520356/pixar-and-lucasfilm-settle-lawsuit-over-silicon-valley-hiring

                                    https://www.theguardian.com/technology/2014/apr/24/apple-google-settle-antitrust-lawsuit-hiring-collusion

                                    1. 4

                                      A very good reason for a union.

                                      Given a union, I wouldn’t necessarily even start with salary, so much as offices with doors and agreements around compensation for work outside of core hours, parental leave and other non-cash quality of life issues.

                                    2. 2

                                      In terms of compensation, I don’t think anyone is saying programmers are poorly compensated. The question is whether non-competes and and sweeping ip assignments are worth it. Literally everyone who works is compensated, of course it is reasonable to dicker over the level of compensation and the tradeoffs involved in getting it. …

                                      Whether or not it is worth it is an individual decision. But at the end of the day we are compensated significantly more than our peers in other fields with shortages (accounting staff, nurses, teachers, etc). If you don’t believe that we’re being compensated enough, then what we really need to be doing is advocating for our peers in those other fields. Because if we’re not getting paid enough, they sure as hell aren’t getting paid anywhere close to enough. And if we improve the culture around valuing employees in general, that will translate into improvements for us as well. A rising tide raises all boats. But as it is, I don’t know anyone but programmers who think programmers are underpaid.

                                      1. 1

                                        I’m all for paying people more, but I’m unclear why you are focusing on these other fields, I was under the impression we were talking about programmers and the IT field

                                        I also disagree that those fields constitute peers. Accountants may be the closes as white collared professionals, but they are in a field where everyone applies the same rules to the same data, which is an important difference. I’m all for labor solidarity, but I think it’s up for people in a given field to advocate for themselves. People elsewhere should lend support, sure

                                        1. 2

                                          I also disagree that those fields constitute peers.

                                          They’re peers in that they’re fields with similar, if not more rigorous, educational requirements and they’re also experiencing labor shortages.

                                          Accountants may be the closes as white collared professionals, but they are in a field where everyone applies the same rules to the same data, which is an important difference.

                                          That doesn’t mean they provide any less value than programmers though. If you run a big business you absolutely need an accountant and a good accountant will more than pay for themselves. That said, given the pay gap, it’s unclear to me that programmers aren’t already getting compensated for signing non competes and assignments of invention. Especially when you consider how much lower the average compensation is for programmers in markets where non-competes and assignments of invention are not the norm [Source].

                        2. 2

                          I’d never sign an assignment of invention, I find the concept to be absurd, especially in an industry like software engineering.

                          I sign NDA’s without complaint when they’re not over-reaching. Many are sensible enough to abide by. But I once had an employer who attempted to make their workforce sign an NDA that imposed restrictions on use of USB sticks retroactively, with huge penalties - up to $10 million - in a company where USB sticks were routinely used to transfer documents and debug builds between on-site third party suppliers and employees of the company. Basically everybody would have been liable.

                        1. 8

                          As a French guy living in Germany, I’ve never seen a non-compete clause in my whole life. They are legal in both countries, but they’re highly regulated.

                          As far as I know the German law limits the period to 2 years, and forces the employer to pay at least 50% of the last salary during the non-competing period. And the french law says that there should be a limit of time and location given in the clause itself, and a compensation should be given during the period in question (the exact salary ratio depends on your job, but it can’t be less than 33%, most white collar jobs are around 75%)

                          Because most employer don’t want to throw money at former employees after they leave (except for big corporation CEO positions), I’ve never seen such clause.

                          When I read about these clauses in the US, I sometimes feel like it’s the wild west over there. Are these clause enforceable outside California? Are these clauses regulated (compensation, limit, …)? Or is that just legal fluff to scare off employees from leaving?

                          1. 3

                            Are these clause enforceable outside California?

                            Absolutely. And they’re not just limited to high paying jobs. The fast food sandwich chain Jimmy John’s makes their employees sign non-competes that keep them from leaving to work at other fast food establishments that sell sandwiches within a within a 3 mile radius [Source].

                          1. 2

                            The whole Python 2/3 debacle is why I gravitated to Ruby, which has its own set of warts.

                            So what are the lessons learned?

                            1. 2

                              Incidently, the reason I moved from Ruby was the 1.8 era where I think there was also a rails 2/3 upgrade at the same time, wasn’t fun. Lesson learned is the one of the biggest obstacles of our job is unsupported software, be it a library or a language, as long as it works and solves your problem, it’s not the end of the world.

                              And just because software is marked as unsupported, it doesn’t mean all the knowledge for X software projects also disappears over night.

                              Or we can just write everything in assembly.

                              1. 1

                                No matter what tools you choose to use there are going to be things you don’t like about them. And that’s okay, you just have to pick a set of warts you can live with.

                              1. 10

                                Python 3 will also go down in history as “a bad way to release software that breaks backwards compatibility.”

                                Now I’m biased as fuck in saying this but PHP sure learned a lot from Python and isn’t the language it once was since it’s released 7(.1, .2).

                                1. 1

                                  PHP sure learned a lot from Python and isn’t the language it once was since it’s released 7(.1, .2).

                                  I haven’t used PHP since 5 was released a few years ago. What has changed? And how has the community changed course significantly without breaking backwards compatibility?

                                  1. 4

                                    They slowly break backwards compatibility with each point release (as they did throughout 5). A lot of people have strongly embraced PHP 7 and I think the biggest advantages right now are scalar type hints, anonymous classes, and the engine is fast as heck. Its a much brighter landscape too with frameworks like Laravel, Symfony, and they’re even moving out of the request/response model with stuff like ReactPHP.

                                1. 10

                                  So much truth on that. That’s THE reason I always tell friends working for startups to stop the hype with graphql, react, go and stuff, and advocate for darn simple Laravel or Rails app.

                                  The message in the end is KISS or just take the first boring tech that will give you enough time to prove your business to be successful!

                                  1. 3

                                    Funny aside: I wanted to contribute to a Laravel app, and damn is it annoying to have to set up a full LAMP stack to do PHP development.

                                    It’s pretty interesting how PHP is probably the easiest language to get production stuff running, but nowhere near as easy as Python/Ruby/Javascript’s “run the included watch script and you’re good to go” for local development.

                                    that said if you know how to use the language, definitely worth just using that. Use what you know, and you can always change things later

                                    1. 2

                                      Laravel has made this process easier through homestead, if you want to set up LAMP on your native OS it takes a while longer.

                                      1. 1

                                        It’s not particularly hard to setup a LAMP stack on your native OS using MAMP or XAMPP.

                                      2. 1

                                        Laravel Valet is a Mac-specific option that is more lightweight than the Homestead VM. Both make local Laravel development simpler.

                                        1. 1

                                          Yeah I was trying that out. Still felt pretty uncomfortable with needing that much software to have a dev server working, but the process was a lot better than doing old LAMP stack stuff in Windows.

                                          I’m glad that PHP has improved so much over the years, and hope it can keep on improving.

                                        2. 1

                                          Isn’t php -S enough for development?

                                        3. 4

                                          Well Go is also pretty simple, imo. In the “Go Programming Language” book, they already show you how to create a web server in the first introductory/overview chapter, since the ability is quite well integrated into the overall structure (and standard library) of the language. I, personally, would say, when one looks at all the real-life use-cases of Go, that it has passed it’s hype phase.

                                          1. 10

                                            A web server is nice, but where’s the battle-tested ORM, routing engine, middleware system, view rendering engine, asset handling system, authentication layer, background job handler, countless other built-in parts, plus roughly a kajillion gems that can drop in to provide various functionality?

                                            Go is interesting and has it’s place, but it’s got a long way to go before it’s competitive for getting a moderately complex site up and running fast.

                                            1. 2

                                              I’m gonna preface this by saying that I thoroughly dislike go for many reasons, but criticizing it for it’s “web stuff” capabilities seems really weird, since that’s like the one thing it’s good at. Out of the things you mention:

                                              ORM

                                              Not really an ORM but equivalent functionality: https://golang.org/pkg/database/sql/

                                              routing engine, middleware system

                                              Provided in the standard library. https://golang.org/pkg/net/http/

                                              view rendering engine, asset handling system

                                              I’ll admit Go’s handling of this is pretty bad.

                                              authentication layer

                                              Depends on what you need to do, but this is definitely covered by /x/crypto or /net/http.

                                              background job handler

                                              Goroutines are like the best part of go.

                                              countless other built-in parts, plus roughly a kajillion gems that can drop in to provide various functionality?

                                              Uh…I’m not totally clear on what else you think is missing for rendering a web app

                                              Go is interesting and has it’s place

                                              What do you think is go’s place? Cause I think go is awful for systems level programming, and really it’s only niche is “web stuff” and command line apps.

                                              1. 4

                                                Honestly, this seems to me like comparing an auto parts shop to a car dealership.

                                                ActiveRecord has its warts, but the Go SQL built-ins are super bare-bones, lets you execute hand-written SQL queries and that’s about it. No comparison IMHO.

                                                I will admit that I was not aware of Go’s ServeMux, which is a bit better than I thought. I only skimmed the docs for it, but they’re like a page long. The manual for the Rails router is at least 20 times longer. I sure don’t see a standardized middleware system, or where you would even put one, given how close to bare metal the web APIs are.

                                                And comparing /x/crypto to something like Devise… well, even the parts shop to car dealership analogy is woefully inadequate. There’s a huge number of ways to do web security wrong. Throwing Devise into a Rails app gets you automatic best practice implementations of almost everything. Pointing somebody at a pack of implementations of bare crypto algorithms and telling them to roll their own everything… that’s a security disaster waiting to happen.

                                                And yeah, goroutines are nice. Until you want to implement a job worker on another computer, or have some records of what jobs are running when, automatic retries with exponential backoff, failure logging, etc.

                                                I could start writing about some of the many other things, but honestly, just read through the Rails guide for an example of the kinds of things a good web framework should do. May the gods of code spare me from having to rewrite all of that stuff from scratch in another language to build a webapp, or from having to maintain a webapp where some other developer rolled all of that stuff from scratch and I have to figure it out.

                                                1. 3

                                                  I use rails and go for several things, and this is a grossly inaccurate comparison.

                                                  The sql packages are not even close to the query generation and object mapping in rails, and there’s nothing close to that level of functionality on GitHub.

                                                  The standard library routing has no support for parameter extraction, nor separation between http methods. You can put together something useful by combining third party stuff, but it’s not orthogonal to middleware, so you have to glue them or pick middlewares designed for your router.

                                                  For authentication, rails has straightforward ways to check auth before running an action; go has bits you can put together yourself and hope you got it right.

                                                  Goroutines are great but are not a background job handler. Failure handling, retries, logging job state etc are all solved easily in rails; build those yourself in go.

                                              2. 7

                                                Okay, if you say so, but it’s far from providing you all those bricks the author is writing about.

                                                I feel you’re totally missing the point of my comment and simply reacting on me categorizing go as potentially hype.

                                                1. 1

                                                  Maybe, I can’t say for sure. I am no webdev, and my interest for startups is nonexistent, maybe even negative. But what I understood you saying, and the author, was to reject the use of newer technologies, because they are new.

                                                  Take for example the most highlighted passage from the article:

                                                  Building a product is not about using the latest and greatest technology.

                                                  All I wanted to point out, in regards to what you said is that this doesn’t “automatically mean to reject any newer, maybe even better fit technology (and that Go isn’t necessarily a complicating factor). I’d agree that one shouldn’t go overboard, and use some one-week-old language for everything, but that’s the same extreme as insisting to use COBOL on the other side. And after all: From what I was told, businesses are all about “risk”, so isn’t this a good example for that?

                                                  1. 3

                                                    Not exactly because they are new but because they lack the bricks Rails for example took years to have.

                                                    A common bias too, Go is a language, not a framework (although it has nice primitives for web).

                                                    But I get your point and I tend to agree to some extent.

                                              3. 2

                                                React can be treated as proven library, I think. And it speeds up UI development considerably. Of course if you require JS UI at all, and just static forms are not enough.

                                                “jQuery way” becomes painful really quick, even with very simple UIs. Server-side things like Rails or Django are usually good enough and not need to be replaced with something more “modern”, but js-side hype tech is born from pain and frustration, so I would not dismiss React, Webpack (Rails has integration for it now) and even fringe technologies like Purescript.

                                                1. 2

                                                  Go is not hype, BUT for making CRUD webapps and not something that requires an application server I’d agree. Go is a good choice when you start needing to proxy data, do long running connections, write a chat server etc.

                                                1. 5

                                                  What is JavaFX? Every time I’m trying to figure out what is it, I find only lots of nonsensical marketing terms like “Rich Internet Applications”, “Rich Client Platform”, as well as ancient dotcom-crash-era buzzwords like “multimedia”. Looks like it’s GUI toolkit that had been planned to replace Swing, but it completely lacks native look and everything is based on skins (hello from 2001). Is it usable toolkit, or just enterprise gimmick to display interactive sales charts?

                                                  1. 10

                                                    I used it on a large-ish desktop project. It’s quite a nice library. It’s easy to use in common cases, has a very clean and regular UI, and is really, really fast. We use the CSS styling just a bit (to offer a dark theme) but not much of the XML-based scripting stuff.

                                                    It’s much easier to use than Swing, thanks in part to backing away from the L&F split.

                                                    Oh, JavaFX also makes it dead easy to get an OpenGL context in a panel.

                                                    1. 2

                                                      So, it’s more similar to Qt Quick and Clutter than Silverlight or Adobe Air?

                                                      And is “traditional” GUI with input boxes, lots of buttons, resizable layouts doable in it? Can I just instantiate trees of these elements without dealing with skinning details or OpenGL? Do standard interactions (selecting text in text boxes with mouse or keys, clipboard, cursor movement, scrolling) work as expected, unlike, for example, some GUIs in game engines?

                                                      1. 8

                                                        I don’t know Qt Quick and Clutter, so I can’t comment. Definitely in the first release, JavaFX was positioned as a competitor to Silverlight and Air. JavaFX 1 was all about the XML to make it declarative and script-driven. With JavaFX 2 they seemed to back away from that positioning a bit.

                                                        As far as the expected complement of widgets, yep. They’re all there. You don’t have to deal with CSS or skinning if you don’t want to. Just instantiate the components and go. All the interactions you’d expect are there. It’s not like an OpenGL rebuild of a GUI toolkit. It’s a GUI toolkit that also makes it easy to show OpenGL.

                                                        (The docs can be a little misleading here again, because they talk about a “stage” and a “scene”, which makes it sound like a 3d engine. It’s not.)

                                                        Another thing I liked is that they extended the JavaBeans getter/setter model with active property objects. Instead of creating a custom listener interface for everything like in AWT, you can just bind to specific properties and get notified about changes to those. That gives you a narrower interface that’s used more broadly… which makes it super-easy to use from Clojure. :-)

                                                        One thing I dislike is that you’re expected to have your main class be a subclass of javafx.application.Application. They want to take control of initial class loading and application startup. There’s a goofy workaround needed if you want (like me) to have main be a Clojure function. That’s not of general interest though so I won’t clutter this post up with it.

                                                    2. 4

                                                      JavaFX was, if I recall properly, the first widespread attempt at doing reactive programming in the UI. I think it grew from the community (Romain Guy was the main developer), as it is too innovative to be something that was created out of a top-down approach. I was happily surprised when it got integrated into the JDK, for obvious strategic reasons at the time, as mentioned in other comments.

                                                      1. 2

                                                        Oracle’s marketing is strange. I got interest to try it only after comments here, official webpages for JavaFX only repelled me. It looked like top-down thing to resurrect applets, I didn’t even know it’s a GUI toolkit and not chart plotting or animation lib.

                                                      2. 3

                                                        It has confusingly referred to several different things over the past, but in this context, it’s really just a UI toolkit - it could be seen as a replacement for Swing.

                                                        I find that it’s nicer to use in some ways than Swing (I don’t particularly like the concept of CSS for regular UIs, but it does make altering style and positioning quick and easy), but it’s less complete, lacking features (such as an extensible text editor kit) that the more mature Swing does have. It’s also more buggy and sometimes slower than Swing, and has some ill-conceived design choices (weak references in property bindings, urgh).

                                                        1. 0

                                                          It’s basically like the interface builder in xcode but just for Java.

                                                          1. 3

                                                            Examples for beginners “Getting started with JavaFX” does not use any builder: first widgets are instantiated directly and then defined in xml. Interface builder probably exists too but it’s definitely not a killer feature of JavaFX, and UI builders exist for Swing too.

                                                            1. 1

                                                              Thanks for the correction! So it’s more like the XML layouts for Android?

                                                              1. 2

                                                                According to other comments here and some introductional docs, it’s just another GUI toolkit for Java, alternative to Swing, but more “modern” and without native look-and-feels. XML is just one of features. It was initially marketed as alternative to Silverlight, but in reality it’s another GUI toolkit.

                                                        1. 2

                                                          I think that web front-end programming is not a craft but there are other subdomains that may be.

                                                          1. 5

                                                            I completely disagree. Not only is it a craft, it is one of the earlier areas of programming that allowed for mass-distribution of digital craftsmanship (for example, the entire net-art movement).

                                                            1. 3

                                                              Dev ops made a dent in it, but system administration is still a cruft. I mean craft.

                                                              1. 2

                                                                I think if you give it time the community will turn front-end programming into a craft. The community around front-end programming definitely doesn’t emphasize craftsmanship like the communities around other subdomains do. It’s way more concerned with trendy tooling and new frameworks. But it’s also relatively young compared to some of those other subdomains. Embedded programming and scientific computing have been a thing since the 60s. Modern front-end programming has really only been a thing since the early 2000s. jQuery came out in 2005. The popular frameworks for server side rendering (CakePHP, Django, Ruby on Rails) all came out in 2005. SPAs didn’t even become a thing until around 2010. The community is still trying to figure out best practices but as far as I can tell it’s done a pretty good job of moving towards a craft based approach. Front-end programming is just relatively easy to get into so there are a lot of newcomers and the ratio of signal to noise on sites like lobsters and hackernews is super low. But you can see a desire to improve quality and consistency in the communities adoption of tooling for static analysis and testing. You can see it in the architectural changes, like the move to component based architectures. And you can see it in the push to be secure by using things like CORS, CSPs, and templating languages that automatically escape programmatic input.

                                                              1. 32

                                                                In the Hacker News thread about the new Go package manager people were angry about go, since the npm package manager was obviously superior. I can see the quality of that now.

                                                                There’s another Lobster thread right now about how distributions like Debian are obsolete. The idea being that people use stuff like npm now, instead of apt, because apt can’t keep up with modern software development.

                                                                Kubernetes official installer is some curl | sudo bash thing instead of providing any kind of package.

                                                                In the meantime I will keep using only FreeBSD/OpenBSD/RHEL packages and avoid all these nightmares. Sometimes the old ways are the right ways.

                                                                1. 7

                                                                  “In the Hacker News thread about the new Go package manager people were angry about go, since the npm package manager was obviously superior. I can see the quality of that now.”

                                                                  I think this misses the point. The relevant claim was that npm has a good general approach to packaging, not that npm is perfectly written. You can be solving the right problem, but writing terribly buggy code, and you can write bulletproof code that solves the wrong problem.

                                                                  1. 5

                                                                    npm has a good general approach to packaging

                                                                    The thing is, their general approach isn’t good.

                                                                    They only relatively recently decided locking down versions is the Correct Thing to Do. They then screwed this up more than once.

                                                                    They only relatively recently decided that having a flattened module structure was a good idea (because presumably they never tested in production settings on Windows!).

                                                                    They decided that letting people do weird things with their package registry is the Correct Thing to Do.

                                                                    They took on VC funding without actually having a clear business plan (which is probably going to end in tears later, for the whole node community).

                                                                    On and on and on…

                                                                    1. 2

                                                                      Go and the soon-to-be-official dep dependency managment tool manages dependencies just fine.

                                                                      The Go language has several compilers available. Traditional Linux distro packages together with gcc-go is also an acceptable solution.

                                                                      1. 4

                                                                        It seems the soon-to-be-official dep tool is going to be replaced by another approach (currently named vgo).

                                                                      2. 1

                                                                        I believe there’s a high correlation between the quality of the software and the quality of the solution. Others might disagree, but that’s been pretty accurate in my experience. I can’t say why, but I suspect it has to do with the same level of care put into both the implementation and in understanding the problem in the first place. I cannot prove any of this, this is just my heuristic.

                                                                        1. 8

                                                                          You’re not even responding to their argument.

                                                                          1. 2

                                                                            There’s npm registry/ecosystem and then there’s the npm cli tool. The npm registry/ecosystem can be used with other clients than the npm cli client and when discussing npm in general people usually refer to the ecosystem rather than the specific implementation of the npm cli client.

                                                                            I think npm is good but I’m also skeptical about the npm cli tool. One doesn’t exclude the other. Good thing there’s yarn.

                                                                            1. 1

                                                                              I think you’re probably right that there is a correlation. But it would have to be an extremely strong correlation to justify what you’re saying.

                                                                              In addition, NPM isn’t the only package manager built on similar principles. Cargo takes heavy inspiration from NPM, and I haven’t heard about it having a history of show-stopping bugs. Perhaps I’ve missed the news.

                                                                          2. 8

                                                                            The thing to keep in mind is that all of these were (hopefully) done with best intentions. Pretty much all of these had a specific use case… there’s outrage, sure… but they all seem to have a reason for their trade offs.

                                                                            • People are angry about a proposed go package manager because it throws out a ton of the work that’s been done by the community over the past year… even though it’s fairly well thought out and aims to solve a lot of problems. It’s no secret that package management in go is lacking at best.
                                                                            • Distributions like Debian are outdated, at least for software dev, but their advantage is that they generally provide a rock solid base to build off of. I don’t want to have to use a version of a python library from years ago because it’s the only version provided by the operating system.
                                                                            • While I don’t trust curl | sh it is convenient… and it’s hard to argue that point. Providing packages should be better, but then you have to deal with bug reports where people didn’t install the package repositories correctly… and differences in builds between distros… and… and…

                                                                            It’s easy to look at the entire ecosystem and say “everything is terrible” but when you sit back, we’re still at a pretty good place… there are plenty of good, solid options for development and we’re moving (however slowly) towards safer, more efficient build/dev environments.

                                                                            But maybe I’m just telling myself all this so I don’t go crazy… jury’s still out on that.

                                                                            1. 4

                                                                              Distributions like Debian are outdated, at least for software dev,

                                                                              That is the sentiment that seems to drive the programming language specific package managers. I think what is driving this is that software often has way too many unnecessary dependencies causing setup of the environment to build the software being hard or taking lots of time.

                                                                              I don’t want to have to use a version of a python library from years ago because it’s the only version provided by the operating system.

                                                                              Often it is possible to install libraries at another location and redirect your software to use that though.

                                                                              It’s easy to look at the entire ecosystem and say “everything is terrible” but when you sit back, we’re still at a pretty good place…

                                                                              I’m not so sure. I forsee an environment where actually building software is a lost art. Where people directly edit interpreted files in place inside a virtual machine image/flatpak/whatever because they no longer know how to build the software and setup the environment it needs. And then some language specific package manager for distributing these images.

                                                                              I’m growing more disillusioned the more I read Hacker News and lobste.rs… Help me be happy. :)

                                                                              1. 1

                                                                                So like squeak/smalltalk images then? Whats old is new again I suppose.

                                                                                http://squeak.org

                                                                                1. 1

                                                                                  I’m not so sure. I forsee an environment where actually building software is a lost art. Where people directly edit interpreted files in place inside a virtual machine image/flatpak/whatever because they no longer know how to build the software and setup the environment it needs. And then some language specific package manager for distributing these images.

                                                                                  You could say the same thing about Docker. I think package managers and tools like Docker are a net win for the community. They make it faster for experienced practitioners to setup environments and they make it easier for inexperienced ones as well. Sure, there is a lot you’ve gotta learn to use either responsibly. But I remember having to build redis every time I needed it because it wasn’t in ubuntu’s official package manager when I started using it. And while I certainly appreciate that experience, I love that I can just install it with apt now.

                                                                                2. 2

                                                                                  I don’t want to have to use a version of a python library from years ago because it’s the only version provided by the operating system.

                                                                                  Speaking of Python specifically, it’s not a big problem there because everyone is expected to work within virtual environments and nobody runs pip install with sudo. And when libraries require building something binary, people do rely on system-provided stable toolchains (compilers and -dev packages for C libraries). And it all kinda works :-)

                                                                                  1. 4

                                                                                    I think virtual environments are a best practice that unfortunately isn’t followed everywhere. You definitely shoudn’t run pip install with sudo but I know of a number of companies where part of their deployment is to build a VM image and sudo pip install the dependencies. However it’s the same thing with npm. In theory you should just run as a normal user and have everything installed to node_modules but this clearly isn’t the case, as shown by this issue.

                                                                                    1. 5

                                                                                      nobody runs pip install with sudo

                                                                                      I’m pretty sure there are quite a few devs doing just that.

                                                                                      1. 2

                                                                                        Sure, I didn’t count :-) The important point is they have a viable option not to.

                                                                                      2. 2

                                                                                        npm works locally by default, without even doing anything to make a virtual environment. Bundler, Cargo, Stack etc. are similar.

                                                                                        People just do sudo because Reasons™ :(

                                                                                    2. 4

                                                                                      It’s worth noting that many of the “curl | bash” installers actually add a package repository and then install the software package. They contain some glue code like automatic OS/distribution detection.

                                                                                      1. 2

                                                                                        I’d never known true pain in software development until I tried to make my own .debs and .rpms. Consider that some of these newer packaging systems might have been built because Linux packaging is an ongoing tirefire.

                                                                                        1. 3

                                                                                          with fpm https://github.com/jordansissel/fpm it’s not that hard. But yes, using the Debian or Redhat blessed was to package stuff and getting them into the official repos is def. painful.

                                                                                          1. 1

                                                                                            I used the gradle plugins with success in the past, but yeah, writing spec files by hand is something else. I am surprised nobody has invented a more user friendly DSL for that yet.

                                                                                            1. 1

                                                                                              A lot of difficulties when doing Debian packages come from policy. For your own packages (not targeted to be uploaded in Debian), it’s far easier to build packages if you don’t follow the rules. I like to pretend this is as easy as with fpm, but you get some bonus from it (building in a clean chroot, automatic dependencies, service management like the other packages). I describe this in more details here: https://vincent.bernat.im/en/blog/2016-pragmatic-debian-packaging

                                                                                            2. 2

                                                                                              It sucks that you come away from this thinking that all of these alternatives don’t provide benefits.

                                                                                              I know there’s a huge part of the community that just wants things to work. You don’t write npm for fun, you end up writing stuff like it because you can’t get current tools to work with your workflow.

                                                                                              I totally agree that there’s a lot of messiness in this newer stuff that people in older structures handle well. So…. we can knowledge share and actually make tools on both ends of the spectrum better! Nothing about Kubernetes requires a curl’d installer, after all.

                                                                                            1. 9

                                                                                              I know some devs who only code at work and are fine. But if there were two identical candidates (a myth, I know) except one had side projects, guess who I pick?

                                                                                              1. 7

                                                                                                I’m not sure it’d be an easy choice for me, though a lot depends on how you resolve that bit about the “identical candidates”. To really generalize, my interactions with people who have side projects are that they learn a bunch of stuff outside of work that could be useful for work, but often would prefer to be doing those side projects too, so might be less focused and/or prone to bikeshedding. I include myself in the 2nd category, fwiw: I learn a lot of things “on my own time” but I’m not necessarily the world’s best employee if you just want to hire someone to produce code.

                                                                                                If you had people with identical starting technical skill, but one had side projects, my no-other-information guess might even be that the person without side projects would be a more productive employee initially. It’s also probably true that they’d be less likely to keep up to date and/or proactively recommend new things unless there was an explicit framework in place to make that happen on work time. But I’m not sure that’s obviously worse in terms of what a company is looking for out of an employee.

                                                                                                1. 10

                                                                                                  If they have identical technical skill and only one has technical side projects, the other is obviously more talented, because they picked up identical technical skills without spending out-of-work time on it.

                                                                                                2. 3

                                                                                                  The one that had hobbies that improved their ability to communicate and work in a team? Maybe even to give and receive constructive criticism, and to compromise?

                                                                                                  That can be satisfied by coding projects, sure. If they’re, for example, participating in an open source project by actively participating in the mailing list or forum, and managing tickets or incoming patches. A solo side-project is the opposite of this, though. Anything where the candidate is spending their time being the sole person making decisions and in control won’t help them with teamwork. If they’re not going through code and architecture reviews, there’s an excellent chance it won’t help them be better coders, either.

                                                                                                  On the other hand, board gaming, team sports, playing D&D, or any number of things will help candidates with the stuff that will make them really productive employees. The kind that isn’t just an additive part of your team, but a potential multiplicative part.

                                                                                                  1. 1

                                                                                                    If they’re not going through code and architecture reviews, there’s an excellent chance it won’t help them be better coders, either.

                                                                                                    I don’t think this is true at all. Sure, it is a whole lot easier to improve when you have an experienced mentor pointing out ways that you can do better. But there are plenty of ways to advance as a programmer without someone else coaching you. Reading quality books and source code written by programmers that are better than yourself is a great way to fill that gap; and arguably something you should be doing even if you have a mentor. At the end of the day programming is no different than any other skill, the key to improving is practicing purposefully, practicing routinely, and taking plenty of time to reflect on that practice. If you’re not willing to do those things you’re not going to be very good even if you have someone telling you how to improve.

                                                                                                    1. 3

                                                                                                      Sure. It’s even possible to improve all on your own, without books or mentors, as long as you’re consistently pushing yourself out of your comfort zone, consistently failing, and consistently reflecting on your experiences and what weaknesses are best addressed next.

                                                                                                      But that’s remarkably hard. Solo projects are great at getting you more familiar with a language, or more familiar with some specific libraries, but they’re just not the right tool if you want to improve your craft.

                                                                                                      If you want to learn how to play violin, then sure you can try buying one, trying to play, and never performing. Reading an introductory text might help a bit. But it’s going to be much faster and better to learn from someone who knows how to play the violin, to perform so you’re confronted with feedback from uninterested parties, and to go back to the drawing board and repeat the process. You can improve at chess by reading books, but if you’re not playing games your progress will be slow. If you’re only playing games against people of similar and lesser skill than you, you’re unlikely to learn much at all.

                                                                                                      Having teammates or other people who are better than you, and who are willing to thoughtfully critique your work and suggest improvements, is the most tried-and-true method of improving your skill at something.

                                                                                                      Failure and feedback are the best tools we have. And they’re usually not provided by solo projects.

                                                                                                      1. 1

                                                                                                        Oh yeah, it’s a million times harder to go at it alone. And I suppose any solo project that would provide a good platform for improving, like writing an open source framework/library or building a complex application that makes it into production and has users, will eventually become collaborative. Because once you have users you’ve got to write some sort of documentation for them and they’re going to be telling you about all the issues they run into and all of the improvements they want made.

                                                                                                1. 3

                                                                                                  At work, I’m building out a budgeting tool for research universities in Django. So I’m spending most of my time writing tests.

                                                                                                  At home I’m refactoring a side project into a multi-tenant SaaS architecture. So that instead of using postgres’ public schema for everything, the public schema will just be used for shared tables and customer specific schemas will be used for tables that store data that needs to be segregated.