1. 1

    How’s it compare to spacemacs with mypy, pylint and pyfmt enabled? My only complaint with spacemacs is the completion tends to be a bit janky.

    1. 2

      Check out the LSP layer included on develop branch: https://github.com/syl20bnr/spacemacs/tree/develop/layers/%2Btools/lsp

      1. 1

        Thanks.

    1. 2

      Working on small side project website, mobile, and JSON API and setting up switching over to Doom Emacs config from Spacemacs.

      Aside, if you use Spacemacs, does it eat up your power/battery? I am on macOS and Energy usage in Activity Monitor nearly sits steady 150+ during usage and I get maybe 75 minutes of battery on a 2017 MacBook Pro.

      1. 1

        What on earth is it doing to draw power like that? I run Emacs (just my own config) and even with rcirc and mastodon.el filling a few buffers it typically sits at zero CPU usage.

        1. 1

          You can try doing profiling on your Emacs to see what plugin can take so much CPU: https://www.gnu.org/software/emacs/manual/html_node/elisp/Profiling.html . Usually, it’s not Emacs itself, it’s a plugin that might misbehave.

        1. 15

          As a junior developer doing my best to learn as much as I can, both technically and in terms of engineering maturity, I’d love to hear what some of the veterans here have found useful in their own careers for getting the most out of their jobs, projects, and time.

          Anything from specific techniques as in this post to general mindset and approach would be most welcome.

          1. 33

            Several essentials have made a disproportionate benefit on my career. In no order:

            • find a job with lots of flexibility and challenging work
            • find a job where your coworkers continuously improve themselves as much (or more) than you
            • start writing a monthly blog of things you learn and have strong opinions on
            • learn to be political (it’ll help you stay with good challenging work). Being political isn’t slimy, it is wise. Be confident in this.
            • read programming books/blogs and develop a strong philosophy
            • start a habit of programming to learn for 15 minutes a day, every day
            • come to terms with the fact that you will see a diminishing return on new programing skills, and an increasing return on “doing the correct/fastest thing” skills. (e.g. knowing what to work on, knowing what corners to cut, knowing how to communicate with business people so you only solve their problems and not just chase their imagined solutions, etc). Lean into this, and practice this skill as often as you can.

            These have had an immense effect on my abilities. They’ve helped me navigate away from burnout and cultivated a strong intrinsic motivation that has lasted over ten years.

            1. 5

              Thank you for these suggestions!

              Would you mind expanding on the ‘be political’ point? Do you mean to be involved in the ‘organizational politics’ where you work? Or in terms of advocating for your own advancement, ensuring that you properly get credit for what you work on, etc?

              1. 13

                Being political is all about everything that happens outside the editor. Working with people, “managing up”, figuring out the “real requirements’, those are all political.

                Being political is always ensuring you do one-on-ones, because employees who do them are more likely to get higher raises. It’s understanding that marketing is often reality, and you are your only marketing department.

                This doesn’t mean put anyone else down, but be your best you, and make sure decision makers know it.

                1. 12

                  Basically, politics means having visibility in the company and making sure you’re managing your reputation and image.

                  A few more random bits:

              2. 1

                start a habit of programming to learn for 15 minutes a day, every day

                Can you give an example? So many days I sit down after work or before in front of my computer. I want to do something, but my mind is like, “What should I program right now?”

                As you can probably guess nothing gets programmed. Sigh. I’m hopeless.

                1. 1

                  Having a plan before you sit down is crucial. If you sit and putter, you’ll not actually improve, you’ll do what’s easy.

                  I love courses and books. I also love picking a topic to research and writing about it.

                  Some of my favorite courses:

                  1. 1

                    I’ve actually started SICP and even bought the hard copy a couple weeks ago. I’ve read the first chapter and started the problems. I’m on 1.11 at the moment. I also started the Stanford 193P course as something a bit easier and “fun” to keep variety.

              3. 14

                One thing that I’ve applied in my career is that saying, “never be the smartest person in the room.” When things get too easy/routine, I try to switch roles. I’ve been lucky enough to work at a small company that grew very big, so I had the opportunity to work on a variety of things; backend services, desktop clients, mobile clients, embedded libraries. I was very scared every time I asked, because I felt like I was in over my head. I guess change is always a bit scary. But every time, it put some fun back into my job, and I learned a lot from working with people with entirely different skill sets and expertise.

                1. 11

                  I don’t have much experience either but to me the best choice that I felt in the last year was stop worrying about how good a programmer I was and focus on how to enjoy life.

                  We have one life don’t let anxieties come into play, even if you intellectually think working more should help you.

                  1. 8

                    This isn’t exactly what you’re asking for, but, something to consider. Someone who knows how to code reasonably well and something else are more valuable than someone who just codes. You become less interchangeable, and therefore less replaceable. There’s tons of work that people who purely code don’t want to do, but find very valuable. For me, that’s documentation. I got my current job because people love having docs, but hate writing docs. I’ve never found myself without multiple options every time I’ve ever looked for work. I know someone else who did this, but it was “be fluent In Japanese.” Japanese companies love people who are bilingual with English. It made his resume stand out.

                    1. 1

                      . I got my current job because people love having docs, but hate writing docs.

                      Your greatest skill in my eyes is how you interact with people online as a community lead. You have a great style for it. Docs are certainly important, too. I’d have guessed they hired you for the first set of skills rather than docs, though. So, that’s a surprise for me. Did you use one to pivot into the other or what?

                      1. 7

                        Thanks. It’s been a long road; I used to be a pretty major asshole to be honest.

                        My job description is 100% docs. The community stuff is just a thing I do. It’s not a part of my deliverables at all. I’ve just been commenting on the internet for a very long time; I had a five digit slashdot ID, etc etc. Writing comments on tech-oriented forums is just a part of who I am at this point.

                        1. 2

                          Wow. Double unexpected. Thanks for the details. :)

                    2. 7

                      Four things:

                      1. People will remember you for your big projects (whether successful or not) as well as tiny projects that scratch an itch. Make room for the tiny fixes that are bothering everyone; the resulting lift in mood will energize the whole team. I once had a very senior engineer tell me my entire business trip to Paris was worth it because I made a one-line git fix to a CI system that was bothering the team out there. A cron job I wrote in an afternoon at an internship ended up dwarfing my ‘real’ project in terms of usefulness to the company and won me extra contract work after the internship ended.

                      2. Pay attention to the people who are effective at ‘leaving their work at work.’ The people best able to handle the persistent, creeping stress of knowledge work are the ones who transform as soon as the workday is done. It’s helpful to see this in person, especially seeing a deeply frustrated person stand up and cheerfully go “okay! That’ll have to wait for tomorrow.” Trust that your subconscious will take care of any lingering hard problems, and learn to be okay leaving a work in progress to enjoy yourself.

                      3. Having a variety of backgrounds is extremely useful for an engineering team. I studied electrical engineering in college and the resulting knowledge of probability and signal processing helped me in environments where the rest of the team had a more traditional CS background. This applies to backgrounds in fields outside engineering as well: art, history, literature, etc will give you different perspectives and abilities that you can use to your advantage. I once saw a presentation about using art critique principles to guide your code reviews. Inspiration can come from anywhere; the more viewpoints you have in your toolbelt the better.

                      4. Learn about the concept of the ‘asshole filter’ (safe for work). In a nutshell, if you give people who violate your boundaries special treatment (e.g. a coworker who texts you on your vacation to fix a noncritical problem gets their problem fixed) then you are training people to violate your boundaries. You need to make sure that people who do things ‘the right way’ (in this case, waiting for when you get back or finding someone else to fix it) get priority, so that over time people you train people to respect you and your boundaries.

                      1. 3

                        I once saw a presentation about using art critique principles to guide your code reviews. Inspiration can come from anywhere; the more viewpoints you have in your toolbelt the better.

                        The methodology from that talk is here: http://codecrit.com/methodology.html

                        I would change “If the code doesn’t work, we shouldn’t be reviewing it”. There is a place for code review of not-done work, of the form “this is the direction I’m starting to go in…what do you think”. This can save a lot of wasted effort.

                      2. 3

                        The biggest mistake I see junior (and senior) developers make is key mashing. Slow down, understand a problem, untangle the dependent systems, and don’t just guess at what the problem is. Read the code, understand it. Read the code of the underlying systems that you’re interacting with, and understand it. Only then, make an attempt at fixing the bug.

                        Stabs in the dark are easy. They may even work around problems. But clean, correct, and easy to understand fixes require understanding.

                        1. 3

                          Another thing that helps is the willingness to dig into something you’re obsessed with even if it is deemed not super important by everyone around you. eg. if you find a library / language / project you find fun and seem to get obsessed with, that’s great, keep going at it and don’t let the existential “should i be here” or other “is everyone around me doing this too / recommending this” questions slow you down. You’ll probably get on some interesting adventures.

                          1. 3

                            Never pass up a chance to be social with your team/other coworkers. Those relationships you build can benefit you as much as your work output.

                            (This doesn’t mean you compromise your values in any way, of course. But the social element is vitally important!)

                          1. 2

                            Not sure how I feel about it as I would rather be reading some fantasy fiction like Harry Potter or Snow Crash and working on a fun side project, but working my way through some old CS books and problems. I feel soft and like my CS skills and train of thought has started to atrophy. Building data structures from scratch, doing a few problems from the chapters. It can get a tad boring sometimes and requires a bit of discipline.

                            No, I’m embarrassed to say I have never read Snow Crash. I’m on book 4 of Harry Potter and enjoy them so far, fun and easy to read and get into. Mom and brother turned me on to them. Next on deck is finishing The Chronicles of Narnia books. I’m book 2, in love with these as well. As I always have, I’m re-reading Foxtrot comics as I feel. Been doing this since about 12 years old. Never gets old for me.

                            Maybe a similar themed thread about what we are watching? Or what we are playing? Working my way through Final Fantasy III (VI in North America).

                            1. [Comment removed by author]

                              1. 10

                                You’re saying that ST was great 4-5 years ago, but apart from the langserver, which one of your points didn’t apply back then as much as it does now? You say that “today there are better editors”, but surely vim is much older than 4-5 years and basically didn’t change.

                                1. [Comment removed by author]

                                  1. 8

                                    The primary reason I stick with Sublime Text is that Atom and VSCode have unacceptably worse performance for very mundane editing tasks.

                                    I’ve tried to switch to both vim and Spacemacs (I’d love to use an open source editor), but it’s non-trivial to configure them to replicate functionality that I’ve become attached to in Sublime.

                                    1. 1

                                      I thought VSCode was supposed to be very quick. Haven’t experimented with it much myself, what mundane editing tasks make it grind to a halt? I am well aware Atom has performance issues.

                                      1. 1

                                        Neither Atom nor VSCode grind to a halt for me, but I can just tell the difference in how quicky text renders and how quickly input is handled.

                                        I’m not usually one of those people who obsesses about app performance, but editors are an exception because I spend large chunks of my life using them.

                                      2. 1

                                        I’ve tried to switch to both vim and Spacemacs (I’d love to use an open source editor), but it’s non-trivial to configure them to replicate functionality that I’ve become attached to in Sublime

                                        This is the reason who I stay with vim, unable to replicate vim functionality in other editors.

                                        1. 1

                                          Yeah, fortunately NeoVintageous for Sublime does everything I need for vim-style movement and editing.

                                  2. 3

                                    I think the really ground-breaking feature that ST introduced was multi-cursor editing. Now most editors have some version of that. Once you get used to it, it’s very convenient, and the cognitive overhead is low.

                                    As for the mini-map, I suppose it’s a matter of taste, but I found it very helpful for scanning quickly through big files looking for structure. Visual pattern recognition is something human brains are ‘effortlessly’ good at, so why not put it to use? Of course, I was using bright syntax hilighting, which makes code patterns much more visible in miniature. Less benefit for the hilight-averse.

                                    I’ve been using ST3 beta for a few years as my primary editor. I tried using Atom and (more recently) VS Code, but didn’t like them as much: the performance gap was quite noticeable at start-up and for oversized data files. The plug-in ecosystems might make the difference for some folks, but all I really used was git-gutter and some pretty standard linters. For spare-time fun projects I still enjoy Light Table, but it’s more of a novelty. I’m gradually moving away from the Mac and want a light-weight open-source editor that will run on any OS.

                                    So now, as part of my effort to simplify and get better at unix tools, I’m using vis. I’m enjoying the climb up the learning curve, but I think that if I stick with it long enough, I’ll probably end up writing a mouse-mode plugin. And maybe git-gutter. Interactive structural regexps and multi-cursor editing seem like a winning combination, though.

                                    1. 3

                                      You might enjoy exploring kakoune as well. http://kakoune.org | https://github.com/mawww/kakoune

                                      1. 2

                                        I’m an Emacs guy myself and I honestly think that multi-cursor editing is just eye-candy for good ol’ editor macros, and both both vim and Emacs include them since… forever?

                                        1. 3

                                          I’ve never used Sublime Text, but I’ve used multiple-cursors in vis and Kakoune, and it beats the heck out of Vim’s macro feature, just because of the interactivity.

                                          With Vim, I’d record a macro and bang on the “replay” button a bunch of times only to find that in three of seventeen cases it did the wrong thing and made a mess, so I’d have to undo and (blindly) try again, or go back and fix those three cases manually.

                                          With multiple cursors, I can do the first few setup steps, then bang on the “cycle through cursors” button to check everything’s in sync. If there’s any outliers, I can find them before I make changes and keep them in mind as I edit, instead of having my compiler (or whatever) spit out syntax errors afterward.

                                          Also, multiple cursors are the most natural user interface for [url=http://doc.cat-v.org/bell_labs/structural_regexps/]structural regular expressions[/url], and being able to slice-and-dice a CSV (or any non-recursive syntax) by defining regexes for fields and delimiters is incredibly powerful.

                                          1. 0

                                            [url=http://doc.cat-v.org/bell_labs/structural_regexps/]structural regular expressions[/url]

                                            This might be the first attempt at BBCode I’ve seen on Lobsters. Thanks for reminding me how much I hate it.

                                            1. 1

                                              Dangit, you can tell I wrote that reply at like 11PM, can’t you. :(

                                          2. 1

                                            I agree with you. I use Vim, and was thinking about switching until I realized that a search and repeat (or a macro when it’s more complex) works just as well. Multiple cursors is a cute trick, but never seemed as useful as it first appeared.

                                          3. 2

                                            I thought multiple cursors was awesome. Then I switched to using Emacs, thanks to Spacemacs. Which introduced to me [0] iedit. I think this is superior to multiple cursors. I am slowly learning Emacs through Spacemacs, I’m still far away from being any type of guru.

                                            [0] https://github.com/syl20bnr/spacemacs/blob/master/doc/DOCUMENTATION.org#replacing-text-with-iedit

                                          4. 2

                                            I’ve started using vim for work, and although I’ve become quite fast, I find myself missing ST’s multiple cursors.

                                            I might try switching to a hackable editor like Yi. I’ve really enjoyed using xmonad recently for that reason.

                                          1. 3

                                            I had a Thinkpad 600e in college with FreeBSD on it (Window Maker was my jam). I miss it, dearly. Some day, I hope to go back to a similar setup. If that’s OpenBSD, I’m fine with that too.

                                            I’ve held off on a new Thinkpad for various reasons: 1. Work provided me a laptop, so I use that mostly (MacBook Pro) with no reason for buying another machine, 2. Getting myself to spend the money is always a struggle for me, and 3. Waiting to see what this Retro Thinkpad ends up being like.

                                            The X1 with OLED display is extremely tempting though.

                                            1. 16

                                              Headphones, turn notifications off, find a way to politely let people know when you don’t want to be disturbed (wearing headphones is a good start), and the rest is self-discipline. Most of my distractions come from me goofing off online, not due to my open office.

                                              1. 6

                                                I find having headphones a pain after few hours. Having no noise in your ears all day is difficult to have if you’re in an open-space at work, but really great and so refreshing!

                                                1. 4

                                                  I just wear the head phones and have no music running. The headphones dull the noise around + also indicating that I’m not interested in random conversations. I use the Bose QC 35.

                                                  1. 2

                                                    This used to happen to me. Then I bought better headphones. Problem was solved. I’ve spent thousands of dollars (USD) on headphones to find what I felt were the best for me and my use. I used to be a headphone snob. I am now content and liquidated my collection keeping only 3: Denon D7000, Sony MDR-1R (I imported from Japan), and the Beoplay H6 (2nd generation)

                                                    Those are my 3 favorites and I’m honestly perfectly content with and have been for at least a couple years. I can go all day with any of the 3 on my head and not really notice.

                                                    Marco’s review of the Beoplay H6 2nd Generation: https://marco.org/2016/03/02/beoplay-h6-v2-review

                                                    1. 1

                                                      Thank you very much for the advices! I was looking for a new pair of headphones and this is really great!

                                                      Regarding my comment, having a good pair of headphones doesn’t change the fact that a marble silence is sometimes nice to work with. I like being in the openspace when I need to collaborate and I don’t mind some noise, when I need to focus deeply, remote at home provides the silence that helps me focus.

                                                      1. 1

                                                        I used to work in a really noisy open space.

                                                        I’d wear soft earplugs (from a construction safety supplier) under big over-ear headphones.

                                                        Frequently I wouldn’t even have any music playing - the headphones hid the plugs, and provided a socially acceptable explanation for not hearing the people around me.

                                                1. 13

                                                  On a tangential remark, I’ve been enjoying going to a coffee shop after work and learning and re-learning mathematics and physics in order to continually stretch my mental capacity. It helps tremendously with stress management at work itself. I feel more capable of taking on enormous, difficult tasks at work because of the challenges I face in remembering how to tackle these math and physics problems that I faced in college. I started doing this about a month ago with a geometry textbook. I’m up to Precalculus now, about 10% of the way through the Precalculus textbook by Stewart. I’m planning on going through Calculus and onto Classical Mechanics, followed by Electrodynamics and Quantum Mechanics. (I really do want a good challenge!)

                                                  1. 7

                                                    You’re lucky. After eight hours of programming/meetings the last thing I want to do is program or do match. After some dinner with my SO, I go straight to reading (never tech stuff) or video games.

                                                    1. 1

                                                      For QM I would recommend Shankar just for the intro section on linear algebra, although most people seem to prefer Griffith’s for the actual QM stuff.

                                                      If you like type theory or algebra (the grown-up kind), I can PM you a link to an early WIP draft textbook from one of my former professors that covers classical mechanics in an exceptionally mathematically rigorous way, with full coverage of the algebraic properties of different physical quantities and systems. It’s actually for a simulation course, but it’s better for learning classical physics than any physics course I’ve taken.

                                                      1. 2

                                                        Thank you for the suggestion! I have read in a few places that reading multiple QM books is common. This is the list of books that I’ve got lined up.

                                                        • Precalculus: Mathematics for Calculus, 6th Edition by James Stewart et al. (Amazon link)
                                                        • Calculus: Early Transcendentals by James Stewart (Amazon link)
                                                        • Classical Mechanics by John R Taylor (Amazon link)
                                                        • Introduction to Electrodynamics by David J. Griffiths (Amazon link)
                                                        • Mathematical Methods in the Physical Sciences by Mary L. Boas (Amazon link)
                                                        • Introduction to Quantum Mechanics (2nd Edition) by David J. Griffiths (Amazon link)

                                                        My biggest concern about this list is which order to read the last four items in. I was thinking of starting in the order listed, but I may end up having to jump around given that there is likely going to be overlap between them.

                                                        1. 3

                                                          For what it’s worth, during my undergraduate studies in Physics, Mathematical Methods in the Physical Sciences and Classical Mechanics were taught for two semesters each, in parallel. In the second semester, alongside the two, we’ve had an Introduction to Quantum Mechanics course (mostly as a conceptual and historical introduction, no very advanced stuff). Finally, Electrodynamics and a “full” QM course followed the year after.

                                                          (There were a lot of other courses in parallel, but these are the relevant ones to your listing. You might want to add a Statistical Physics / Thermodynamics textbook in there for good measure. :))

                                                          Try checking out the curriculum of a few undergrad courses on universities near you to get a feeling for a reasonable order of reading.

                                                          1. 1

                                                            Muchas gracias, amigo. That is a most excellent idea.

                                                      2. 1

                                                        What do you mean when you say go through? Do you do all the problems? How do you decide on problems to work if you do any at all?

                                                        1. 1

                                                          Anything that is difficult to grasp I’ll review it by going through enough problems until I feel comfortable with the topic.

                                                          I’ll go back and review fundamentals to re-enforce dependent material, too.

                                                      1. 2

                                                        I graduated at a big school in CS. However, I do want to go back to get my major/grad school in CS some day. I don’t have a reason other than I like to learn. I love the academic environment and my dream job is to be a professor or teach. My brother did this, but in statistics and just finished his PhD in December 2016.