Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
The Bipolar Lisp Programmer (2007) (marktarver.com)
163 points by sph on Aug 11, 2023 | hide | past | favorite | 131 comments


I quite enjoyed this article, but I reckon they're talking about ADHD rather than "bipolar" mind. Seen under that lens, I resonate with his caricature.

Focus is a precious, rare resource outside my control. Mainstream languages, made for collaboration in big teams rather than maximum personal freedom, soon impose restrictions that kill hyperfocus. The "unused variable is an error" is the most egregious of them that I hate with a passion. The separation between compilation and running is another that seemingly inescapable today. With languages like Lisp, I can code at the speed of thought from prototype to production.

These days tech is advanced by FAANGs, so no one cares about removing the safeties from our languages; this is the reason the focus-challenged among us still go back to Lisp and other lost languages (Forth, Smalltalk, Self) that have disappeared from the mainstream.

Rust, C++, Go, Python, etc. are good, but they're not made for us.


ADDENDUM: I love Lisp but I want to clarify that its secret sauce is that it enables exploratory programming: programming from inside the system.

While most languages are akin to preparing a detailed blueprint and executing it (then stop to update the blueprint and try again), exploratory programming is like sculpture. You have an unformed mass full of unrealised potential, and you slowly carve it to shape.

The ADHD/Bipolar mind of the article isn't great at making plans, it's great at following its gut instinct, making shit up step by step.

Lisp enables this flow, but also Forth, Smalltalk, Self, etc., which I've been deeply obsessed with lately. Sadly, all we have today on the mainstream are basic REPLs which are a harmless, defanged version of these old environments promoting creativity and flow state.


"The ADHD/Bipolar mind of the article isn't great at making plans, it's great at following its gut instinct, making shit up step by step."

Which is why I do best with the command line, piping outputs and rapidly iterating to get the output I want.

And why I struggled so much writing Python in a larger, more complex script/app. I wanted to constantly run and rerun the smaller parts to get each one just right. Unfortunately that doesn't work great when you're interacting with a half dozen different APIs that take minutes to run each time. Until I realized what was slowing me down, I was just getting more and frustrated.

Now I am at least aware of the issue. Part and parcel of growing from sysadmin to DevOps to coder, I guess? Now I know to look for shims or stubs that help me. Now I can write tests that isolate and verify, rather than run the whole damn thing end to end.

It helps me to think of objects as those command line tools. Their method parameters are the stdin that get passed through pipes. I apologize that this isn't particularly profound, but sometimes epiphanies are made from smaller realizations.

Maybe I should have tried writing part of my most recent script in Lisp? Just to see if it resonated like described in this thread?


> I wanted to constantly run and rerun the smaller parts to get each one just right.

> Maybe I should have tried writing part of my most recent script in Lisp?

90% of Lisp programming is selecting an expression in your editor and pressing C-x C-e to execute it. And continue until you are satisfied it operates as you want, then integrate it in the larger system.


> I wanted to constantly run and rerun the smaller parts to get each one just right.

One one hand, as you alluded too, I've found unit tests are a great solution to this. Kill two birds with one stone - rapidly iterate on a chunk of code and come out of it with solid test coverage.

It's too bad that's not very feasible in gamedev most of the time with so much going on in the world, but over time I think that environment improved my skills to where it's less of a problem.


what about gnumeric, observablehq, jupyter, the unix shell, and the browser console (firebug and its clones)

admittedly it's hard to save the state of the page after you hack on it in the browser console, but jupyter doesn't really have that problem


> programming from inside the system.

Can you elaborate on that? I think you are saying that REPLs in other languages don't do what you can do in Lisp, but I don't think I know enough to fully understand why.


Imagine this:

You start a fresh REPL session with a vague idea of something you want to build. You have good tooling that enables you to write code in your favourite editor and pipe it to the REPL through a socket. You write a couple of functions and send them to the REPL. You call them a few times with some test arguments, maybe define a couple global variables while testing, and realize one of the functions doesn't quite behave the way you want. You tweak the code and send it again to the REPL. The function is redefined and works properly now.

You're happy with what you have for now, so you save the entire current environment of the REPL, functions and global variables and all, into a file (called an image) on your disk. The next day, you come up with a great new feature so you load up the image and continue exactly where you left off yesterday, with all your functions and even global variables as they were defined previously. You add your new feature, all while testing and tweaking your functions interactively, and then you save the new environment into an updated image. Any other code that loads that image will be able to take advantage of your updated functions and variables now.

The power of lisp is not just the fact that there's a REPL — a lot of languages have that now. It's the ability to save and reload the entire current state of the REPL (interactively or programmatically), which enables the powerful interactive development that so many lispers, including myself, rave about.


What happens when you want to share the thing you built with somebody else? If I type a defun into a REPL, is there a good way to get source code back out again?

Because there's a problem I've run into several times when writing Lisp (I use SLIME): I decide to refactor some stuff, so I rewrite some stuff, maybe remove a function or two from the source as part of that. Things seem to be working fine. I save my .lisp files and then at some point end up restarting the Lisp process (often because McCLIM can be kind of flaky and lose its connection to the X server). When I go to load my code back in, I get errors, because oops I was actually still calling that deleted function somewhere -- it "worked" before because the old function was still hanging out in the image.

When I develop in a compiled language, I just accept that I'm going to be re-building the entire thing from scratch (equivalent to restarting the lisp process & re-loading the source files) every time I want to try a change; if I broke something, I'll find out the next time I run make/go build/whatever. When I'm developing in Lisp, and I'll freely accept that my Lisp dev flow probably isn't ideal, it's so easy to screw up but be unaware of it for hours if not days: I write some code, I'm happy, I close Emacs, then a week later I come back and try to load my package and it's just broken.

I could solve it for myself by just using images: the "deleted" function would persist in the image, and every time I started working again it would be there. But if I ever want to let somebody look at the code, hack on it, make changes, what's that look like?


> When I develop in a compiled language

"batch compiled from scratch"

OTOH, most usage of Common Lisp is compiled, often by an incremental in-image compiler

> because oops I was actually still calling that deleted function somewhere

Typically Lisp IDEs have features like Edit Callers and/or List Callers. I would

1) "Edit Callers" -> this walks me through all functions which use this function, I change the functions and I can edit/compile them

2) When I'm done, I use "Undefine Function", which then undefines the function from the running Lisp.


> "Undefine Function"

That's the key; if you delete a function make sure to undefine it so it's not sticking around in the image.

In slime you can use `C-c C-u` which is bound to FMAKUNBOUND.


> If I type a defun into a REPL, is there a good way to get source code back out again?

this used to be the normal way of programming in lisp repls (like in 01980) but maybe this is good enough

    * (defun tri (n) (loop for i from 1 to n summing n))
    TRI
    * (describe 'tri)
    COMMON-LISP-USER::TRI
      [symbol]

    TRI names a compiled function:
      Lambda-list: (N)
      Derived type: (FUNCTION (T) (VALUES NUMBER &OPTIONAL))
      Source form:
        (LAMBDA (N)
          (BLOCK TRI
            (LOOP FOR I FROM 1 TO N
                  SUMMING N)))
> When I go to load my code back in, I get errors, because oops I was actually still calling that deleted function somewhere -- it "worked" before because the old function was still hanging out in the image.

so a thing you can do in that case is to delete it from the image at the same time

well, you can't really delete it from the image, but you can remove the function binding of the symbol, and since normally in common lisp implementations function calls indirect through the symbol (which is why you can replace the definition with a newer one) deleting the function binding is enough

    * (defun tri0 (n) (tri (1+ n)))
    TRI0
    * (tri0 4)
    25
    * (tri0 5)
    36
    * (fmakunbound 'tri)
    TRI
    * (tri0 5)

    debugger invoked on a UNDEFINED-FUNCTION @52A00674 in thread
    #<THREAD "main thread" RUNNING {1001348003}>:
      The function COMMON-LISP-USER::TRI is undefined.

    Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

    restarts (invokable by number or by possibly-abbreviated name):
      0: [CONTINUE      ] Retry calling TRI.
      1: [USE-VALUE     ] Call specified function.
      2: [RETURN-VALUE  ] Return specified values.
      3: [RETURN-NOTHING] Return zero values.
      4: [ABORT         ] Exit debugger, returning to top level.

    ("undefined function" 6)
    0] 
as rainer pointed out, slime has a command for this (i barely use cl myself, you know much more than i do)


I work in a slightly different way by always saving my code in emacs and loading it fresh each session (though I have gone a couple of weeks with a live image/session on my laptop). I am fortunate that my 3D system [0] compiles and loads in a few seconds.

I also use the REPL for quick tests, and evaluate new code by writing it in emacs and compiling it one function at a time (C-c C-c).

Finally, I keep files of tutorial/demo/test cases which work a bit like a notebook, allowing me to quickly verify that existing 3D scenes still work.

[0] https://github.com/kaveh808/kons-9


About 15 or 20 years ago I had a work flow using SBCL Common Lisp where I saved images and always restarted a new work session where I left off. Easy to do.

I was motivated to do this because I had a ton of linguistic and text data in my environment which back then took a little while to load. Now, I organize everything I do into small or sometimes tiny Quicklisp projects/libraries and that is much more convenient for me.

If you want to really get into image based programming, the open source Pharo Smalltalk is very good.


This is the kind of thing that should be included in language tutorials!

It particularly resonates with me because I think so many project teams neglect the Developer Experience. In my opinion DevOps should be more about making coding, testing and deploying as frictionless as possible.


when this term first came out, it really seemed like that was the point

now it just seems like a hundred children you have to pacify and get to bed before you can even start working


That is very helpful. Thank you. Most of my exposure to Lisp has been Scheme and Racket and minimal at that. Are these images you describe something that is part of a particular distribution of Common Lisp?


Images are pretty routine amongst most of them (though not all).

In the end what you have is a base image, and then a set of code and instructions to transform that image into your runtime image, then you distribute that image as your "application".

I have never needed to do this, as all of my work has been utilitarian in nature, rather than some kind of monolith distributed to others. I simply load my code on to the stock image and go from there.

But even then, for folks that do that, they may well load up the stock image with useful and common, personal, utilities, and snapshot that. Their "application" is their essential working environment.

Smalltalk does, and Forth can work from this concept of an image.

Schemes tend to not be this way. They are interactive, but the image concept is not as ingrained in the Scheme world. Instead, it's more like doing development in something like Bash -- an interactive environment to be sure, but one that always resets to the baseline state and must be reloaded when started. There are certainly Schemes that can do this, it's just not as routine.


This is a great perspective. I am not focus-challenged... at least I don't think I am, but your comment has been a revelation. I always had this nagging feeling about myself that I don't find myself fully immersed in the problem domain when working Go, Python, Rust like the way I feel while working with Lisp.

When I am programming in Lisp, I enter a sort of zen like state where my mind becomes one with the problem. Now don't get me wrong. I can write a lot of Go, Python, Rust, what have you on some days when I am working on a good problem and there are no meetings to distract me. On some days, I can do this for 6-10 hours straight with little breaks. So I don't think I have the ADHD problem that the parent or the OP is talking about.

But I still have this nagging feeling with other mainstream languages that their tooling, their ecosystem, the breaking dependencies, the "making the compiler happy", the stupid language restrictions and such things distract me from my problem domain.

But not so with Lisp. With Lisp, it's just me, the problem, the algorithms to solve it and the code. Nothing else. It is a feeling of hyperfocus (a word you so rightly chose). For some reason I cannot get into that state with other languages and I could never understand why.

Your comment is on to something here and this might very well explain the zen-like hyperfocus feeling of immersing fully into the problem domain I get with Lisp.


Sure, the ADHD thing might be a bit on the nose, but the thing is... you've just become really good at being productive with languages that constantly interrupt you for inane reasons. You're productive DESPITE the terrible tooling we have to deal with everyday.

Sometimes it's nice to shed all that bullshit and just create something.

Sometimes, only on languages with the least amount of syntax and semantics you're able to sculpt that fleeting idea you had. Inspiration is very delicate, and it doesn't take a lot for it to die down because you forgot to update npm and your Emacs config is borked.


  > But I still have this nagging feeling with other mainstream languages that their tooling, their ecosystem, the breaking dependencies, the "making the compiler happy", the stupid language restrictions and such things distract me from my problem domain.
I can relate to this in a different way.

It seems the vast majority of work today is not "the problem", per se, it's the interface that exposes the problem (or solution) to others. Shoving stuff in and out of format (JSON, SQL, etc.), marshaling the data over interfaces, or building UIs to expose and work with it, etc. The problem domains themselves, for a lot of systems, can be pretty simple.

But with CL, with the reader, and things like Emacs, a lot of that falls into the background -- with the caveat "as long as you're willing to work with native representations", i.e. S-expressions.

I have an "application" in CL, and it's 1500 lines of code. Outside of a couple prints for debug, there is no I/O. No user interface. Nothing. It's all "just code". It's all "just problem".

Meanwhile, I have a Java program I wrote. It wraps a 1000 line Java utility into a GUI. There's 4000 lines of code to present that GUI. It's a not quite fair comparison, as the entire purpose of the application is to expose this utility into a "usable form".

But, with Java and other languages, there's always going to be some level of that. With CL, again if it fits within the confines of the REPL and S-expressions, you get all of that "for free".

Trivial case with a simple Java command is you need some way to parse the command line options. Extended lambda lists give you that "for free" in CL. Named parameters, optional parameters, default values, etc. Arguably the entire point of the extended lambda list descends from their use within environments like Lisp Machines, where the function arguments WERE the "command line", and that's why its so robust. Those are all nice features when writing code, but they're really nice when you have to type stuff in all the time.

And this ability to not worry so much about external representation, and moving and converting data, instead just focusing on what's being done to the data, in native terms, it's very liberating.

There is no "impedance mismatch". Just code, just data, and code is data.


> The "unused variable is an error" is the most egregious of them that I hate with a passion.

Same. That has tripped me so many times when trying out something simple in golang.

I get why they are undesirable in the long run, but in the short run I'm often trying out a fragment and don't have the users of every variable written yet.


Your comment and the grandparent comment have both really validated me. I know that's weird to say, but I really thought I was just Wrong about the linters/LSPs and unfinished lines or unused variables. Thank you :)


Those that implemented the unused variable feature are completely unaware that there are two modalities of programming: exploring a problem space, and building a solid product.

When you're exploring, you don't want your compiler to stop you in your tracks to warn you about pedantic nonsense. It's not a syntax error that prevents your compiler from understanding, it's just arbitrary restriction that the compiler decides to pester your about, a sort of a robotic grammar nazi.

Computers are obtuse, the worst thing they can do is ignore your perfectly parseable and valid instructions for arbitrary reasons. Machine, if you know I'm not using a variable, kindly let me know and carry on doing your job.


I'm certain they're aware of the second modality; I just think that Go is narrowly focused in design and it's not really for that other kind of user.


it is vanishingly unlikely that ken thompson and rob pike are unaware that people sometimes program to explore a problem space


Ken's first language is pretty tolerant of programmer silliness, maybe too much.


do you mean ibm 709 assembly or what

i don't actually know what he was hacking on at berkeley


You are wrong, just like these other people.

You guys want to have your cake and eat it too -- to be correct despite being lazy and sloppy.

It makes no sense. Bite the bullet. Don't have unused variables. There's no such thing as "exploration". After you've "explored" enough (where "explored" means "coded sloppily"), you've quickly exhausted your mental buffer, and it's suddenly expensive to go back and polish what you've done, making yesterday's exploration today's (hopefully not too creaky) foundation.


It is trivial to ignore unused variables, early returns leaving dead code and so forth while editing and then check&reject them before applying to production. Fix whitespace in the same git hook.

This is one where faster local development (because you don't have to repeatedly, jarringly stop what you're doing and patch up something that doesn't matter) and clean source in a common repo are both possible and very easy to achieve.

But whatever. Yay go.


My hype for Zig died the day Andrew decided to push for that nonsense.


For it was the use of @, Objective-C style, and not having an answer for use-after-free.

If I need to use analysers to fix that, I already have those for C and C++ for the last 30 years.


I do wonder if I’d be diagnosed with ADHD if I didn’t already have a fairly obscure neurological disorder. My visual cortex can’t filter its own noise out properly which causes a bunch of mostly migraine-like neurological issues including apparently making my focus unreliable and forcing me to work in a very “burst-then-rest” kind of fashion, but I was already that way beforehand it just got much worse when I contracted the disorder.

Either way this comment makes me want to try a LISP! I might give Clojure a go, I daily drive another alt-JVM language at the moment so it’s a natural choice.


This is super interesting. Thank you. Feels similar to subtle patterns in my next of kin and their inner workings. So I can read more, would you mind sharing the name of the disorder?


The disorder’s called visual snow syndrome, it’s named after the main symptom that differentiates it from other disorders which is TV-static like visual distortion but it sometimes causes a lot of other things typically associated with migraine to the point before it was studied in its own right it was assumed to be an uncommon variation of migraine; unlike migraine though for many people it doesn’t produce any pain at all, just other migraine aura like neurological symptoms. I’m not so fortunate, I get a permanent one-sided headache, brain fog, occasional derealisation episodes, photophobia (that one’s fun but fortunately I live in usually grey Britain), and that general kind of thing. It was a migraine specialist researching the condition in the UK who eventually diagnosed which was good as at the time there was a fair bit of rubbish on the internet about the condition (though that’s a lot better than it used to be, I was sixteen when I got it and all the doctors could tell me at the time was ‘we have no idea what this is but it’s not going to kill you’).

As for treatments there basically isn’t one. Among other things I experimentally microdosed quetiapine against it (under the theory dopamine might be involved) under the supervision of a doctor which basically cured the visual distortion but not the pain, but I quickly built a tolerance and binned it off because the side effects aren’t great. Some people benefit from anti-seizure medications but not everyone and the side effects can also be bleak. Fortunately medical cannabis is legal in the UK and it’s very effective against the pain, the amount of unsuccessful things I’ve tried qualifies me for it and the pain’s only a problem on very bad days now. Coding with the monofur font helps me too!

Of course everyone has some noise in their visual system, a little bit of TV static isn’t necessarily indicative of disease. For reference I struggle to read when it’s bad, and my night vision is impaired quite a bit compared to what it was before so you’d definitely notice if it was problematic.


Just a intuitive thought, a bit unresponsible maybe, so consider on your own risk: you researched the effects of ketamine and its derivatives on your disorder? Din't know why I think of this; probably because they are know to also affect obscure pain stuff like phantom pains and generally interact with perception (I feel it reduces oversensitivities like not beeing able to bare some stimulus and such) currently researched as an fast acting and lasting over its acute effects treatments for depression.


If I'm ever eligible for a study into it I'd definitely at least consider the idea, though it's not something I'd want to do outside of medical supervision given the mechanism of my condition is not well characterised yet.

One anecdotal thing from support groups etc that makes me cautious is that while some people are born with it and some people contract it spontaneously later in life (this was my case), other people can contract it after taking various types of drug. Typically these are serotonergic drugs like antidepressants, psychedelics, and that sort of thing which aren't in the same category so it'd probably be okay but it's definitely possible I can make things worse as well as better.


Ah. Funny. I probably have this. That was unexpected. Thank you.


> but I reckon they're talking about ADHD rather than "bipolar" mind

I think while some of the people he describes may have ADHD, very few people with ADHD are this person. His description resonated with me as a particular archetype, one that often makes their way into grad school eventually. Often enough to be recognizable.

I also don't think the author meant these people are bipolar in a medical sense, but used "bipolar" as the success+failure designation, perhaps unfortunate terminology.


I don't think the kind of student the author is talking about has ADHD symptoms or any sort of mental illness. I think they just have different personalities - and having a certain personality than the majority of people shouldn't be considered a mental illness or disorder. People are not all the same... at what threshold do we count difference in personalities as an issue?? As long as the person can keep functioning in society without major side effects (crime, extreme isolation, depression) the person is just "normal" even if they tend to work and act differently from the average.


[deleted]


I like to think I'm ADH, I've got everything ADHD except for the disorder


It's not necessarily technically impossible to make this work in Rust/C++/Python. Using something like rr, completely disabling all optimizations, and making all functions virtual should make this possible in theory, as long as you don't change data structures. I'm sure it is going to be extremely hard in practice, though.

If you're interested in trying to make this work, we can try implementing it first in Python using a shim annotation on every function and making some changes to an existing debugger plugin, it will definitely be difficult to integrate but it should be doable.

For C++, something similar can be done by hacking the compiler to make all functions virtual and then hooking up NativeJIT to recompile functions as-needed. Eventually using something like rr we can even replay execution after we change data structures.

I really resonate with the idea of exploratory programming and find myself in a similar position to you - but I can't use Lisp for most of my work, so given the possibility, I really do think that making tooling that makes this kind of development environment possible is the best option, and I'm pretty sure it's possible to do it, so why not have the best of both worlds?


> Rust, C++, Go, Python, etc. are good, but they're not made for us.

I also don't see any technical reason you couldn't have the best of both worlds. E.g. a dynamic runtime environment that allows recompiling functions on the fly etc., but also have a separate batch compiler that can type check the program as a whole, do whole program optimizations, etc.

So you can do exploratory programming while developing, and the run the batch compiler before committing changes, when doing releases, etc.

I think the biggest challenge is simply the amount of effort required to design and implement it (and of course someone who's interested enough in it to do it).


Okay, you made me want to try Lisp.


The sibling comment suggests Clojure, and last time I tried I lost all patience after having to deal with setting up Java, lein (it's been quite a while).

If you want the least amount of friction possible, install Racket and run DrRacket. Here's a tutorial: https://docs.racket-lang.org/quick/index.html and one to make web apps: https://docs.racket-lang.org/more/index.html

(I don't mean to disparage Clojure, I'm sure it's great, but a newbie needs something easy to get excited about, not having to mess with JDK and setting up Emacs)


I had the same experience. Spent over an hour trying to strap all the components into a working system just for it to trow error after error. So I gave up learning Clojure and instead went into Pharo. Self-contained environment trivial to set-up, same live environment typical of lisps, but approached from the Smalltalk side. I enjoy it.


and moving from Racket to Clojure is an easier step than straight to clojure.


Clojure sucks.

Go with Lisp instead. Or OCaml. Both are purer and leaner than the JVM-addled morass that is Clojure.


For a quick start, can recommend Clojure using VSCode as editor (with the Calva plugin).


I was wondering whether this sounded more like ADHD or ASD than "bipolar", then decided that he wasn't using the word in that sense and let it go.


Ruby could be a good compromise. Unfortunately it lost the battle long time ago.


Which battle is that?


The battle for relevance. A language that isn't growing is dying.


"Lost the battle?" Ruby is a far better ecosystem now than it was when it was getting popular. C is "dying" according to your definition. It's number 2 on the TIOBE index, while Ruby is in the top twenty. I'm using Common Lisp do build my product, and that one is long dead and buried according to popularity.

Maybe there are business reasons to avoid less popular programming languages, but there aren't any programming reasons to avoid them. Maybe we should stop treating tools as if they were candidates for homecoming king and queen.


This comment is certainly true for me. The article really resonated for me.


While there are definitely some tortured genius types out there, I think many of those who present as such described in the article really aren't. You know, it's pretty easy to appear like a genius when none of your peers have anything to show for it either. The only question I ask for genius is "What has this guy done?". Which is a pretty difficult question to answer when you're still at school and haven't lived a life yet.

Our own self concept is based on the story we tell ourselves. This is an important emotional/intellectual regulatory tool we deal with in a daily basis. Evolution gave us self reflection because it's very useful to us. But it doesn't mean it's a reflection of reality.


Geniuses are Generative


See also: The Lisp Curse: <http://www.winestockwebdesign.com/Essays/Lisp_Curse.html#mai...>, which is a followup and commentary to this article.


Related:

The Bipolar Lisp Programmer - https://news.ycombinator.com/item?id=21999802 - Jan 2020 (2 comments)

The Bipolar Lisp Programmer (2007) - https://news.ycombinator.com/item?id=13467473 - Jan 2017 (57 comments)

The Bipolar Lisp Programmer (2007) - https://news.ycombinator.com/item?id=8904208 - Jan 2015 (11 comments)

The Bipolar Lisp Programmer - https://news.ycombinator.com/item?id=8801608 - Dec 2014 (25 comments)

The Bipolar Lisp Programmer (2007) - https://news.ycombinator.com/item?id=3374849 - Dec 2011 (38 comments)

The Bipolar Lisp Programmer - https://news.ycombinator.com/item?id=2275657 - March 2011 (86 comments)

The Bipolar Lisp Programmer (an oldie but a goodie) - https://news.ycombinator.com/item?id=859669 - Oct 2009 (22 comments)

The Bipolar Lisp Programmer - https://news.ycombinator.com/item?id=187867 - May 2008 (15 comments)

The Bipolar Lisp Programmer - https://news.ycombinator.com/item?id=78739 - Nov 2007 (32 comments)

The Bipolar Lisp Programmer - https://news.ycombinator.com/item?id=20012 - May 2007 (8 comments)

(Reposts are fine after a year or so; links to past threads are just to satisfy extra-curious readers)


I'm exactly this type of student. 18 yo, just starting university next month. Any advices?

Every single thing in the article fits my life so far, the boredom, the pointlessness of all things, the ease of brilliance, 1 to 1, sans the sadness because I'm still hopeful that the world can be fixed and am still an idealist. (I attribute this to my faith.)

My classmates always envied how little or none I work for the same results but very few realized it's kind of a curse at the same time[1]. When you don't have a habit of working, you can't work hard when you need it. I think this can be a problem now as I'm entering university (it happened to be a mild problem in late HS too). I would not throw it all up with girls and beer (cos I'm muslim) but I don't know whether I will be bored, because I heard the curriculum isn't exactly full of shiny things.

1: Still I'm forever grateful to Allah for it, no complaints. Learned so much in my all free time not spent doing pointless homework.


Diversify, socialize, and start things before they're due*.

Take classes / sit in on lectures from different fields (art history, painting, russian literature, architecture/furniture making... the list goes on, just make sure it's interesting to you). If you've got AP credits racked, your entire first year's worth of requirements just got freed. Use them piece-by-piece over your semesters to explore other avenues rather than graduating a year early. Don't be afraid of 300/400 level classes as a sophomore (assuming you're solid for the first 3 semesters). It's a great way to better integrate with upper classmen while you're still a fledgling.

Join clubs that do different forms of the work you're interested (applications of theory vs problem sets), or entirely different skillsets**. You should be able to meet people above and below you, enabling avenues to learn and teach.

*I never did figure out how deadlines work.

**E.g. sports. "The mind cannot exist without the body" - Morbeus


> *I never did figure out how deadlines work.

The failure mode goes "this thing will take two days, I'll start two days before the deadline, oops". The fix is "this thing will take two days, I'll start it immediately". You can then still drop it after two days if you wish, but you have options if your estimate was poor.


One piece of advice: some things in university might be pointless and/or hard. Treat it like a game, the goal is usually quite clear (grades, passing, etc.) and work as much as you can to achieve the best results. Don't think too much about whether there's a point, and if it's boring, find ways to not make it boring (read more literature about it, solve trickier problems)...


I think you're right to be concerned. I coasted through secondary school with a 4.0..and when I reached undergrad I didn't have the tools to apply myself. I wasn't a big fish in a small pond anymore, I was near the bottom of the heap. first year I did ok, but by the end of the second I was irrecoverably lost.

my advice is to figure out what you want to get out of it. sure, maybe you need a degree, but that's a really big space. most of it seems like a pointless sysiphysian exercise. but there are some really great teachers and peers in there, and a lifelong passion if you can find it.


Be as practical as possible; at the same time, compromise as little as possible on following your heart and your interests.

If something isn't practical and it doesn't bring you joy then it isn't worth your time. Don't fool yourself into wasting time!


Not bipolar, but comfortably in the spectrum, and I matched the details pretty well. What he does not mention, which from my point of view is important , is the tendency to go down rabbit holes. Lisp is a shallow rabbit hole and you do get the satisfaction of getting it without an huge investment. And I do love lisp with passion, but never finished anything using it. Python is therapeutic in a way. It can get you to finish that “assignment” at last moment with less of a feeling that you should perfect it. If you are that eventually B student, do not fret, you can do quite well professionally when meaning is linked to livelihood.


I get this. I've been programming Python (mostly) for the last few years, and it's honestly great for getting things done in places where most of what we're asked to do boils down to sticking lego bricks together.

However, I'd strongly disagree with the assertion that lisp is a shallow rabbit-hole. It's probably one of the deepest I've ever been down. There's a good half-century of history there (much of which is even recorded!) - you'll end up learning about four or five different object systems and probably implementing your own, for example - and, even if you want to ignore the past, the accessibility of every level of a lisp system means that I probably know more about how SBCL turns my code into electricity than I ever will about Python, despite never having used the former professionally.

Big big, very deep rabbit-hole filled with a lot of very interesting rabbits.


I wonder if I could write the story of the BBM once he left the university and went on to work in Corporate Land.

My career (if may be called that) can be summarized by a constant swing.

On one side, I have a "job" where I start well but after a while I fall out of grace from higher-ups because I inevitably end up calling out their bullshit and/or start seeing the pointlessness of it all and lose interest in progressing there. This leads me to either quitting or getting fired, which brings me to the other side of the swing: I dive into another project where I try to do everything "my way", no compromises, no shortcuts, no justification of "best practices" because "that is how everyone else does it".

While I am on this side, I feel incredibly productive and I am forced to grow/learn a lot of things that are required to the problem at hand. Yet, because of this hard-line stance on not compromising, my projects gets either out-competed by a startup that was (rightly) willing to take the shortcuts I didn't take, or I end up building something that had no market for, or (worse) there is a market and no strong competitor but I refused to pivot out of the original idea for a matter of "principle" that only I cared about - hub20 definitely fell into that category.

When I am finally out of steam (or financial reserves), I go back into the job market, usually with a renewed set of skills which helps me land a job that was better than the previous one, and the cycle is complete.

Honestly, I am tired of this. These swings were fun for the first 3 or 4 times but now I am increasingly feeling that my luck will run out soon and that I need to get out of this swing, no matter on what end. Either I finally make one of my projects more than a nice portfolio piece or I learn how to settle and navigate the corporate world without hating it and myself so much.


> I inevitably end up calling out their bullshit and/or start seeing the pointlessness of it all

The fundamental point to keep in mind is that it does not matter. The only thing you are entitled to in a corporation is your salary. Interesting projects and things making sense all over are just side perks. They are very nice perks, I have to say, but they don't pay your rent or put food on your table.

Keep this is mind and life will get easier.


Don't you ever get a feeling that life is more than worrying about how to make rent or put food on the table?

Maybe it's just my (relatively) comfortable upbringing in Brazil or me living for over 10 years in Germany, where I see how the Welfare State affords me some peace of mind in knowing that my kids will be okay even if I give up on my career... but "I just better swallow this bullshit and do so for the majority of my productive life or I won't be able to pay rent" has never been a thought that crossed my mind.


That pretty much describes my "career" of the past 20 years. Lately it's been getting harder and harder to get _any_ job. These days it's either web dev which has reached unbearable levels of idiocracy with its endless tail-chasing web frameworks, microservices and even the platform itself (DOM/CSS), or it's million-line C++ legacy-on-arrival abstraction shitfests written by OOP-heads. It feels like there's nowhere to run.


I've found that "devops" is a pretty nice niche to fall into, even with all of its warts. And that means devops as in literally a developer who can also provision/manage infra and operations and not just a YAML jockey who gets a buzzword title. You can kind of pick your lane: dev-experience tooling, build systems, infrastructure automation, observability systems, etc.

It's a nice way to break out of the rat race of bad practices and questionable frameworks being used all over the place and it seems pretty secure because most of the tail-chasing framework types aren't exactly keen to learn the details of what actually takes code from 0 to production-grade so having the breadth of knowledge becomes an asset that lets you work on a variety of problems. Obviously there's a different slew of annoying things to deal with (wrangling cloud services, insane abstraction around infrastructure, etc.) but I think those are more pleasant to work around.

The infra-side of things also hasn't really slowed down in hiring like pure developer positions has.


That could work except there's just as much BS in devops as in dev. The fact that this job title exists at all to me is a symptom of the same problem.


Have you considered part-time?


I did and still do, but it's hard to find someone willing to hire part-time for a lead/staff/IC position. If you have any good tips, I'd appreciate it very much.


Move to a country where working part time is a right ( eg Germany), get hired full time, wait a year or so, reduce your hours.


I live in Germany already. AFAIK, changing to part-time without any special condition (e.g. Elternzeit) would require a change in the contract, no?

Also, I've had little success breaking into any higher-level position as an employee here. For the past 5 years or so I've worked only remotely for foreign companies and/or freelance and/or on my own projects. Employment offers were low-balling me and in a German company who would see me as a simple cog.


Being seen as a simple cog has the benefit that the relationship with your employer is clear: you show up and do want they want you to do, they pay you. Nothing more, nothing less. That leaves you to define your identity using something other than salaried work.

Part-time always requires a change in the contract, even as Teilzeit in Elternzeit (at least the part of the contract that says how many hours you need to work has to be changed). All the regulations regarding regular part-time can be found here https://www.gesetze-im-internet.de/tzbfg/index.html §8 is probably the most relevant for you.


  1  he is
  2  his time
  3  he or
  4  his assignments
  5  he doesn
  6  guy is
  7  his low
  8  his guitar
  9  guy and
  10  him go
  11  him then
  12  he chooses
  13  he goes
  14  his natural
  15  he can
  16  he wants
  17  he goes
  18  he relies
  19  his natural
  20  him through
  21  his assignments
  22  He experiences
  23  his usual
  24  He can
  25  his assignment
  26  he hands
  27  he doesn
  28  his official
  29  him too
  30  his UNIX
  31  he would
  32  he could
  33  his own
  34  He flunks
  35  He ends
  36  He can
  37  his strength
  38  him to
  39  He conceives
  40  he embarks
  41  his resources
  42  his own
  43  him so
  44  he will
  45  his sensitivity
  46  he knows
  47  he smells
  48  He can
  49  he is
My conclusion: this is about something that only happens to guys.


heh, i didn't notice that when i read the article; kind of puts it in a different light


I’m fairly annoyed with myself on my worse days for heading into embedded as a career path when Lisp (clojure mainly) is the only development process I’ve really ever felt fit my brain. I’m positive that there is a Lispy language out there (actually in existence, or the aether) that is appropriate for embedded work, but the constraints of the target make it difficult to envision.

I like C and assembly because they’re simple from a language semantics level but incidental complexity is nearly unavoidable. I’m not sure if I have undiagnosed ADHD like many here are wondering, but I do wish I could go back to living in a REPL without giving up the joy of working on real hardware at the register programming level.


I just got a Pico W to run Forth on. It's like a REPL for low level hardware, and I'm unreasonably excited to play with it this weekend.

Somehow I've gone 36 years without anyone telling me I could do explorative programming on bare metal, and now I can't shut up about it.


i'm sorry, i've been trying to tell people that for years (specifically with respect to forth)


yea forth is amazing for that, i used to develop a lot of baseline or "test everything in the beard spin" type if firmwares in forth and miss it


would enjoy seeing a write-up or blog on this


> I’m positive that there is a Lispy language out there (actually in existence, or the aether) that is appropriate for embedded work, but the constraints of the target make it difficult to envision.

Perhaps Fennel* fits the bill?

* https://fennel-lang.org/


Lisp makes a spectacular high level assembler but you may have trouble using it in a team environment. Think writing assembly but with lisp as the macro layer.


that's kind of the way i wrote http://canonical.org/~kragen/sw/urscheme, which is a compiler from a subset of scheme

it outputs textual assembly though


I've found, as a Lisper, that the secret to being effective and valuable to a company such that you're both irreplaceable and not too much of a drag on the rest of the organization is to pick secret weapons that have slightly more overlap with the normal world than Lisp.

Clojure, Nim, Elixir, and more faintly flirt with the true unbridled power of a CL environment, but primarily provide useful abstractions and some familiarity, compatibility, and/or killer features that can't be turned down as easily as a true CL environment. It works out, when the company is small enough that you're driving your own project. Just be sure do document what you did.


What do you like about Nim? I've started playing with it and it's quite comfy but I don't know much about it's capabilities yet.


Nim is terse yet general and can be made even more so with effort. E.g., You can gin up a little framework that is even more terse than awk yet statically typed and trivially convertible to run much faster like https://github.com/c-blake/bu/blob/main/doc/rp.md

You can statically introspect code to then generate related/translated ASTs to create nearly frictionless helper facilities like https://github.com/c-blake/cligen .

You can do all of this without any real run-time speed sacrifices, depending upon the level of effort you put in / your expertise. Since it generates C/C++ or Javascript you get all the abilities of backend compilers almost out of the box, like profile-guided-optimization or for JS JIT compilation.

EDIT: There really is much more, as with any system - I was just trying to give a flavor of what appeals to me.


I refer you to my post on the Nim 2.0 release:

https://news.ycombinator.com/item?id=36956144


I'm also curious about your experiences using nim as a secret weapon in corporate programming.


I refer you to my post on the Nim 2.0 release:

https://news.ycombinator.com/item?id=36956144


This very much describes me to a T and I've come to realize I just have ADHD and (excuse the narcissism) above average mental capacity in some subjects. Haven't gotten diagnosed yet, but both my SO and my best friend have it, and the parallels are staggering and explain a lot about my behaviour. I've developed a shit ton of personal techniques to gain some focus even when it seems impossible and engage in humility to counteract my cynicism. It's only going half well, but a hell of a lot better than in university.

Other people in this position, what did you do?


I keep seeing people say "I have X but I haven't gotten diagnosed yet". Pet peeve: you _think_ you have ADHD but you can't state that you have ADHD without a diagnosis. If you have a piece of bone sticking out of your leg, it's fair to self-diagnose with a broken leg. Mental conditions are much harder to lock down definitively, especially because ADHD, autism, and bipolar all share similar symptoms. My own personal anecdata is that the people I've known who suspected they had ADHD more often than not did but they (myself included) still needed a diagnosis before stating it as a matter of fact


OK, I can say I don't have it if that helps. My point is that I share a lot of the problems that two important people in my life do, and seemingly the same way they think about stuff that other people find very weird, I also do. And it's been this way for a very long time. They are diagnosed professionally with ADHD. So, I think there's a high likelihood, but I don't know, obviously. I was asking for others experiences in handling said situations.

edit: I'm also not interested in getting a diagnosis since I don't want it to be on any file in general. Call it paranoia, I don't want some medical file marking me as having a disorder or being mentally ill.


> Call it paranoia, I don't want some medical file marking me as having a disorder or being mentally ill

Not paranoia at all, I had a bored psychiatrist showing a wildly unprofessional amount of skin diagnose me with Bipolar type II after a single 15 minute interview, and now I have serious issues getting life insurance. Even with several other psychiatrists giving opposing diagnoses.

Much better to suspect (and apparently trigger some people's disdain) than let someone write something down in permanent ink.


> Other people in this position, what did you do?

Got medicated, and reduced the amount of billable hours to a minimum that lets me make rent, and gives me a ton of unstructured fun time to pursue today's source of dopamine. Today it's one library, tomorrow it's hacking on a project, next week, who knows?

In other words, make it so programming is a way to express your creativity, rather than simply your day job.


Thanks for the comment. I've been trying to program creatively again like I used to, but it's hard with a stable job (even though I have quite a lot of freedom in work hours and output by employment standards).

> Got medicated

Used to be addicted to amphetamines so I think I'll pass on this one. It's effective, definitely, but I don't think I can have a sizeable amount of them at disposal or bad things happen.


Amphetamines have saved my sanity if not my life, so I treat them with utmost respect. And I don't find any urge to take more than my daily dose anyway... I crave my single cup of coffee more than any ADHD medication.

The alternative to get a ton of dopamine is plenty of exercise, clean diet, protein, good sleep and a generous amount of caffeine. I mean, that's good advice for pretty much everybody.


There is no such thing as "bipolar personality". People should seriously refrain from using the term bipolar when they clearly don't have any understanding of the disorder. At least he didn't get it mixed with borderline I guess.


The kind of personality he describes does exist but it has little relation to bipolar disorder.

Given how he defined the term, I suspect he is using the word bipolar in its general meaning of having two states.

Bipolar is a bit of a misnomer as is, multi-polar is a better descriptive what what the disorder actually is. There are not two states, there are several overlapping, non-exclusive “states”. (For example: mania and depression are not exclusive.)


Eh, maybe it's coincidence, but I am Bipolar (type I) and I deeply relate to the personality type described by the article, including how the author relates ambition/boredom to mania/melancholia.

Interestingly enough, I also had a favorite professor in college who mentored and looked out for me to a certain extent, who was big into Lisp and Haskell, and who was quite acquainted with bipolar disorder himself due to other people in his life.


This tracks with my own experience, and I don’t believe he is literally saying people of this personality type are medically bipolar.

I used Common Lisp for a few years and then switched to Clojure for another four years. At the time, it seemed that Clojure’s ecosystem could overcome the lone-wolf problems that CL faced. In the end, Rich Hickey made it clear that Clojure was his toy that we were lucky to use, and so its ecosystem never took off like it could have. It’s a real pity and a terrible lost opportunity.

Since then I’ve gone all in on languages that I don’t particularly like, but whose ecosystems provide such value that the language itself is somewhat immaterial: JavaScript and Python.

But I do think about lone-wolfing sometimes, in the context of building new products for myself,

If I ever went down that path again, I’d choose Common Lisp over Clojure. Clojure is easier to use, has more libraries, and has JVM interop, but these benefits are outweighed by Clojure’s opinionated restrictions on the language itself. Ultimately, if I am going lone-wolf or nearly-lone-wolf, I might as well use the most powerful language that doesn’t force its opinions on me.


The DSM and its disciples are so focused on aberrant behavior that they neglect to explore the experiences and mental models of those they treat. What is it about having a mood disorder leaves one prone to eschew strong typing in favor of improv at the REPL? Is it the mood that makes the object more clearly visible, or what it does to a person when they delve into the abstract?


I used to be all in on the Blub Paradox discourse -- but I've been learning some C++ for the Arduino and the differences in power with, say, Python, are mainly related to how easy it is to think-as-you-code in a dynamic language.

Of course, my life story is such that I've used Python professionally to the extent that I've started to forget all other languages -- so I naturally find the Blub Paradox Discourse favorable. But all the footguns that come with passing around pointers to memory addresses also come with a whole different way of expressing problems; whole different range of thoughts that are thinkable.

(I valiantly await the Rust brigade in my replies...)


As someone with pretty bad ADD/ADHD, I sympathize with the other comments in this thread. I personally find languages such as FORTH to pretty "comfy", however I think it has more to do with the interactivity of the development cycle. There are other ways to get this interactivity without doing REPL-driven development. Test-driven development is can get you very, very close to the same thing with most languages.


>The flip side of all that energy and intelligence - the sadness, melancholia and loss of self during a down phase.

On that other side, the positive side, is there a self?

>Another feature about this guy is his low threshold of boredom. He'll pick up on a task and work frantically at it, accomplishing wonders in a short time and then get bored and drop it before its properly finished.

Working frantically at a task doesn't sound like self-realization.


Well, sometimes working frantically does get us bipolar folks somewhere, for example:

* To a place where other people see the value and join into the project before we burn out.

* To a place where a discovery or insight is made that is valuable without needing to be thoroughly polished. IMHO this is why so many brilliant mathemeticians are bipolar: once an insight is reached and communicated, value has been created. No debugging or security updates required :)


I feel personally attacked :) Lots of symptoms of ADHD in here too as well as bipolar (I have both and enjoy Lisp too).


Does anyone use Shen? I was looking into it recently and thus recognize the author of this post as the originator of Shen.

https://shenlanguage.org/

Why would one use Shen over Common Lisp, Racket, Chez Scheme, or Clojure, for example?


I love Shen and highly recommend the Book of Shen and Tarver's other book on Logic and Computation.

The crazy thing about Shen is that its type system is sequent calculus, which means when you define your types, you are literally writing the same language that mathematicians use when they prove things about type theories.

Why would you use it? Because you can leverage a crazy amount of power by writing your own type theories in your programs.

Is it practical in today's corporate world? Probably not, but there is at least one case study in the real world https://www.youtube.com/watch?v=lMcRBdSdO_U


Thank you for the link to the talk! I'll watch it for sure.

If I am interesting in using functional languages (currently F#, Elixir, and Racket) to explore GUI systems, graphics, symbolic math, numerical computing like machine learning and swarm algorithms and automatic differentiation, agent-based modeling, fractals and general chaos theory stuff, etc., is Shen a good match for that type of exploratory, almost from first principles but towards something that is actually usable work?

Is Shen closer to Scheme or Lisp? I typically fall in the Scheme side of things a la Racket.

Thanks for all the information and help!


Definitely usable for those cases. You might have to do some extra work to build the necessary libraries though.

It’s closer to scheme I think, being a lisp-1, even though it’s originally implemented in Common Lisp.


Thanks! And I watched some bits of that talk and got excited about the whole KLambda thing and the ability to use Shen hosted on top of another platform. That seems very interesting to me, especially since Shen has Prolog inside it, and is something I'm going to look into more.


Shen does something unusual in deployment. Their idea is to write a smallish number of intrinsics and data structures in your main language, and then import the shen interpreter on that. This gives you code written in shen, callable from the host language.

This is interesting for sharing code across multi-language projects, e.g. as a JavaScript library and a Java one, where the shen interpreter gets written once per language and now all your library code is callable from any of them.

I think it's a minor misfire that this is an interpreter, as opposed to a compiler from shen to whatever language, but that would be fixable. I'd rather compile the shared definitions to raw c++ code ahead of time than run an interpreter.

Aside from that, the definition is mostly in shen (modulo said primitives) so it has an axiomatic angle to it, and the type checker is a prolog. Compiler and prolog engine both available to user code of course.


I feel this hard, but It is very hard to do low level programming via lisp. I really need an alternate for lisp for low level stuff. Sucks that you dont really have much options. There is forth, but its not standardized like common lisp.


I remember this chestnut from back in the day. Sounds like a discipline issue. If Lisp really is the programming language that appeals to people with discipline issues, then were I a hiring manager a fondness for Lisp would be a no hire.


That's actually great, as you would be doing these people a favour by not hiring them.


This is from 2007, and it should say so, as it did one of the previous times around:

https://news.ycombinator.com/item?id=13467473


the mosaic background of this site is stunning, i need to figure out how to generate that


It's a photo, isn't it?

I took it to be the ceiling of the dome of Hagia Sofia but I could be wrong. It definitely looks Moorish, though. A grand mosque dome of some kind.

Not saying programmatic decoration would be a bad thing -- it wouldn't! But beware: much Islamic decoration is text. It's writing. You can't just programmatically generate that.

Okay, "AI" chat bots can, but the _text_ is simple. It's the calligraphy that matters. Generating that would be very hard.



I think the author would suggest painting your lentils before using the tweezers to place them :-p


"He can see far; further than in fact his strength allows him to travel. He conceives of brilliant ambitious projects requiring great resources, and he embarks on them only to run out of steam. It's not that he's lazy; its just that his resources are insufficient."

This speaks to me. As I get older, I am tempted to start curating a list of my "failed" (or abandoned) projects.

I have been fortunate enough to launch an open-source 3D graphics Lisp project late in life which has managed to keep my interest. Early on, I made a number of conscious decisions about how I would view this project and avoid some mistakes of my past.

- No comparing to existing 3D packages. It's evident that I can't compete with commercial packages with decades of programmer effort.

- No hunting for a "better" language (though this hasn't really been a problem). A goal of the project is to develop a system where I can bring the power of Common Lisp to bear on 3D graphics. In some ways this is a throwback of work I did developing 3D graphics on Symbolics Lisp Machines back at the MIT Media Lab [0]. Returning to my youth?

- Keep it simple. Or, does it need to be more complicated? Understandable code is a benefit, as is code you can (mostly) keep in your head. Avoid excessively clever code, which I have been guilty of in the past (macros, anyone?). Also (more controversially) avoid dependencies where possible; keep it in house.

- Build a community. Having others involved is the best way I have found for not running out of steam. My other projects have invariably been solo efforts. Now I am interested in creating something which will outlast me. Hence the decision to put the project on Github [1].

- This "thing" has value in and of itself, and doesn't need to be "better" than what is out there. By virtue of being different enough, it is a worthwhile project to bring into existence. The world probably doesn't need another browser-based JavaScript package.

- Keep the momentum going by working on whatever interests me at the time. Avoiding tedious development and yak shaving keeps me from losing motivation. I do realize the article touches on this as a weakness of the Lisp developer mindset, and I admit to not being motivated to build an industrial-strength system. E.g. my half-baked GUI built on top of raw OpenGL.

- Finally (have to stop sometime), don't overthink things. Enjoy the journey. I am enjoying enhancing the system while not fretting over who will use it or for what purpose. The journey is the destination.

[0] https://medium.com/@kaveh808/late-night-lisp-machine-hacking...

[1] https://github.com/kaveh808/kons-9


I've never had a professor understand me like this. I picked up Lisp during my Freshman year when I bought SICP. If you look at my transcripts you can easily infer my mental state at the time. Some semesters all A's, others all F's (or W's), with no rhyme or reason. I graduated with a 1.7 GPA, showed up high to class (if I showed up at all), and barely made it through. It took me 9 years to graduate between all the stopping and starting, working at Pizza shops most of the way through.

But I never had problems with the programming assignments or the labs, I enjoyed those. And when I finally got my degree, I found out that all it takes to make hundreds of thousands of dollars is to solve a couple of algorithms for someone. I guess it all worked out in the end, although I do hate the corporate world (and have trouble staying anywhere long) with a passion and would very much like to find a way out.

Note: I was put on bipolar medication because of the wild swings in my grades during college, but I don't believe I am actually bipolar so I no longer take it.


> I picked up Lisp during my Freshman year ... I do hate the corporate world (and have trouble staying anywhere long) with a passion and would very much like to find a way out.

maybe we should work together


I'm going to over-generalize and say that we are a type. while we don't really work that well with people who have different mindsets sometimes, we don't necessarily work very well together either :(


I think that type is "hacker". Welcome to the club!

https://catb.org/jargon/html/personality.html


and to think we used to run this place




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: