1. 83

  2. 30

    And after discovering late in the interview process that Apple has a blanket ban on all programming related hobby projects:

    Ask any potential new employer about their side project policy early on

    Wow. I cannot even fathom working under such conditions.

    1. 15

      Yeah, my view is that my employer owns my time when I’m at work, I own my time when I’m not at work. As long as I don’t use their intellectual property and don’t secretly work for a competitor, they have no influence on what I do off work.

      Luckily, I’m in the extremely privileged position that I can afford to pick between jobs based on that criteria. I have gotten unreasonable clauses removed from contracts because I have the legitimate option to not take a job I’m offered. Many people aren’t in that situation.

      1. 10

        The author explained the rationale in a comment on the HN thread. I, too, couldn’t imagine working in such an environment; the whole point of employment imo is to be able to support myself enough to work on side projects.

        1. 9

          Note that clauses like this are illegal in some countries. For instance, in France, exclusivity clauses cannot cover unpaid work (and they become void for a year if you create a company).

          This does not cancel loyalty clauses and non-competes, but those are strictly regulated as well, and I think Apple’s “we can work on anything without you knowing” would not be applicable.

          1. 3

            I don’t go for it personally, but for some people ‘impact’ is one of their biggest motivations.

            The sheer number of units shipped makes apple an attractive place to work if that’s one of your motivators.

            1. 1

              Don’t believe everything you read on the internet. This is category untrue.

            2. 11

              It’s curious how of the successful Haskell projects in the wild, few if any go crazy with the type system.

              (This observation is based primarily on PostgREST and Pandoc, and now ShellCheck. GHC might be a counter-example.)

              1. 3

                It’s curious how of the successful Haskell projects in the wild, few if any go crazy with the type system.

                Considering how popular e.g. lens, servant, and aeson are, I’m not sure this follows. What is your criteria for being a “successful Haskell project in the wild?” What’s your definition of “go crazy with the type system?”

                1. 6

                  Those are librairies though. PostgREST, Pandoc and ShellCheck are not meant to be used only by Haskell developers.

                  1. 0

                    So, let’s say “user-facing apps” then. Now what was meant by “go crazy with the type system” I wonder?

                  2. 4

                    In what sense does Aeson go crazy with the type system?

                2. 7

                  Love ShellCheck! We use it in our CI to lint all our shell scripts at $dayjob. Adding ShellCheck to our build process and fixing all the initial issues was at times boring, but also immensely educational about sh/bash as a language (and why you should never use it for anything more than the simplest stuff…). I’m positive that running ShellCheck on any non-trivial collection of shell scripts will help you find and fix a lot of security issues as well as other bugs. I’m not sure whether that is praise for ShellCheck, or an indictment of shell as a programming language… ;-)

                  1. 8
                    Line 1:
                    at $dayjob
                       ^-- SC2154: dayjob is referenced but not assigned.
                       ^-- SC2086: Double quote to prevent globbing and word splitting.
                    Did you mean: (apply this, apply all SC2086)
                    at "$dayjob"
                  2. 2

                    I am left wondering why there still hasn’t been some “I write in language X and it compiles down to shell” tool in widespread use.

                    I’m not a fan of all the transpiling and webpack shenanigans, but I’d be so much onboard for “write in Rust or other sensible language and output as shell”.

                    1. 2

                      I am left wondering why there still hasn’t been some “I write in language X and it compiles down to shell” tool in widespread use.

                      Batsh? It compiles down to Shell but also Windows Batch, which is kinda neat.

                      Personally I use Shexp which while not a language, allows to essentially build shell-like scripts in OCaml and I suppose such solutions exist in other languages as well, like Python which the user might have already installed, so replacing shell scripts becomes practical.

                      1. 1

                        Good points, I think I read about shexp at some point, but it’s only close to what I mentioned, not exactly it.

                        • a normal language that people actually use and where I can leverage the ecosystem
                        • widespread use ;)
                      2. 1

                        The other way around seems quite interesting too: compile shell scripts to C or Rust or whatever. With special optimizations for simple uses of tools like sed, grep, cut, etc.

                        1. 1

                          Interesting? yes. Good for legacy scripts? Probably. Solving my problem of not wanting to write shell scripts? Nope ;)

                          1. 1

                            It would help with my tendency to only want to write shell scripts!

                      3. 0

                        I’ve always wanted to learn Haskell, the only thing preventing me is the ridiculous size of the GHC. :/

                        1. 5

                          Can you elaborate on what you mean by ridiculous size of GHC?

                          1. 3

                            Not OP but:


                            $ sudo pacman -S ghc
                            Packages (2) ghc-libs-8.6.5-1  ghc-8.6.5-1
                            Total Installed Size:  375.35 MiB


                            $ sudo pacman -S ruby
                            Packages (2) rubygems-3.1.2-4  ruby-2.7.0-1
                            Total Installed Size:  14.16 MiB


                            $ sudo pacman -S python
                            Packages (1) python-3.8.1-4
                            Total Installed Size:  80.64 MiB


                            $ pacman -S gcc
                            Packages (3) binutils-2.33.1-2  libmpc-1.1.0-2  gcc-9.2.0-4
                            Total Installed Size:  174.21 MiB


                            $ sudo pacman -S rust
                            Packages (5) icu-65.1-2  libedit-20191231_3.1-1  libxml2-2.9.10-1  llvm-libs-9.0.1-1  rust-1:1.41.0-1
                            Total Installed Size:  324.50 MiB


                            $ sudo pacman -S jdk-openjdk
                            Packages (1) jdk-openjdk-13.0.2.u8-1
                            Total Installed Size:  93.03 MiB
                            1. 2

                              I doubt parent meant installation size. In what circumstances would installation size of the compiler be the only thing preventing them from learning the language?

                            2. 2

                              As mentioned by wezm, the installation size. I know it sounds weird, but I don’t really want to learn a language that requires an ecosystem that big. I prefer small, simple languages instead.

                              1. 1

                                Then, maybe, you haven’t “always wanted to learn Haskell”?

                                1. 1

                                  I always had wanted to, and still do. If a new toolchain comes out that’s smaller in size, then nothing would be stopping me from using haskell. Until then…

                              2. 1

                                Install debian. Then compare the installation sizes of ghc, gcc, python, ruby, go and java.

                                1. 2

                                  The comparison with Java is a bit unfair, since developing with latter (or any language built on top of the JVM, like Clojure) will end up downloading nearly the entirety of the Internet into your ~/.m2 folder.