this is a satire even if it wasnt meant to be one. I had so many great attributes of you in mind only from watching your videos, but you chose two poorly argumented and one obvious advantages and putting them in a click baity title made this the worst video about programming I've seen this year
That's why I mentioned these two shortcuts SPECIFICALLY. Ofc there are many others that are not so common and readily available, I just thought it weird to mention something that is everywhere else as a Vim perk.
@Yog Sothothologist that's incorrect, I also never had any uses of algorithms. If you're a web developer or SE algorithms/data structures won't be much of use for you. You don't need to know the language syntax inside and out that's what documentation is for. You just need to know how to apply the knowledge itself and when to use what where.
@@CapeSkill There are tons of work for people that can only do basic programming, where you do not need any real knowledge of algorithms and datastructures. That work also tend to be low level work that you can hire just about anyone for that has spent some time with the specific technology you want to have them programming for, which means those jobs would tend to be entry level jobs. If you need to solve some bit harder problems, then you will have a hard time finding an elegant solution or even a solution at all. If you want to transition from writing "meh" or "okay" code to "good" or "great" code, then you need to understand a good deal of algorithms, have a good understanding of the underlaying systems, get familiar with the many different ways to write code and practise enough to know when to apply each of those tools. How do I know this? My work includes rewriting code written by decent programmers, who have their focus on the real life problems their programs are about, and are less focused on the higher end of programming, and getting it to run much faster is not unusal, heck I have even had a 100000 times speedup before.
I feel like competitive programming usually encourages you to do stuff that would not scale well to larger applications or would not pass a thorough code review.
@@0x6e95 Some examples: 1) proper variable names that are understandable without comments 2) modularization, aka separating it out into multiple files/namespaces etc. 3) write stuff so that it is testable, e.g interfaces, dependency injection etc. 4) exception handling; TLDR: writing something fast encourages you to take shortcuts
@@samuelschwager Those are all valid points but I sincerely doubt any developer worth their salt would ever code in a competitive programming style for production software. You would usually only delve into CP after you've dealt with writing good production ready code so I don't really see how CP would encourage you to employ lazy coding practices for writing prod ready software. I can see that being a problem if a beginner's first foray into code was through CP but that's rarely the case.
@@0x6e95 It depends. The exercises in CP are usually quite small compared to large legacy production software. So I guess there are people that get started in CP (the easier problems) and might get hired into a 1 person team with no one who reviews their code ;)
@@jason_v12345 Yeap :) I remember watching some amateur reviewing some kind and one of his points was that writing bool==false instead of !bool is a sign of bad programmer. This Vim argument is on the same level :D
I got skeptical when you start talking about VIM, which is a good advice btw, but you got my "thumbs up" with algorithms and sleep. Especially for JS developers it's so easy to get caught in the fancy lights with libraries upon libraries struggling for your attention and forget the basics. Coming from a coding boot camp I realized that what made feel insecure about my code and scared of technical interviews was the lack of knowledge in algorithms. I am dedicating some of my free time and work with it and it has helped me greatly. I cannot tell if it really gives me a competitive advantage but it has improved my perception and confidence overall
Actually when i was younger I was thinking the same that keyboard shortcuts are that u are expert, but today, I thinking good developers are those who can name variables very well, reuse existing code, and write their code like writing a poem, without bothering with too much comments. About the data structures course, I will add also S.O.LI.D principles and some of the Design Patterns, but this is not problem to who is better developer and who is not. Developers are poisoned with frameworks for frontend and backend and they can't understand the true power of datastructures. But if some developers can go with basic structures like queue, hash, binary tree thats ok for me. Today I respect someone if can do the S.O.L.I.D principles and refactor some code with design patterns. Third thing i like to point for enterprise software is DDD and those who knows this very well are plenty really rare and small. In this time of career I can say that DDD, S.O.LI.D and design patterns is the backbone for quality code together with unit + integration test, but when u merge multiple developers they just do the procedural development, enhanced with high order functional functions. Just to finish if I found someone who can model the problem in DDD way that is the hero for me. And yes one more thing, thinking with tests in mind, this will make u more better and valuable developer, all other things will came into place.
"Actually when i was younger I was thinking the same that keyboard shortcuts are that u are expert, but today, I thinking good developers are those who can name variables very well, reuse existing code, and write their code like writing a poem, without bothering with too much comments." Both are important. And yeah, comments should never be used to explain what the code does, only why it does it. Function names are there to explain what is being done, so use those. "And yes one more thing, thinking with tests in mind, this will make u more better and valuable developer, all other things will came into place." Make sure to write your unit tests *BEFORE* you write your code. It will make you think about all the different edge cases that need to be covered and allow you to streamline your development process, as you'll always know what you are working towards.
Although I am very young, I agree or even think you have understated a lot. I think SOLID and designing maintainable codebases are far more important the data structures or algorithms, and that's coming from someone applying for DS/Algo centric PhD programs and jobs. Most code has zero need for novelty and should be built to be easy to understand and extend, rather than to be efficient or elegant. I used to do carpentry and this is somewhat akin to my observations there, 99% of the cuts and joints made on a job are simple, and should be done consistently and accessibly. For the 1% of complex work, you can have a reliable person who knows how to do that perfectly. In CS this seems to be akin to just about any library vs the work built from the library. I recently ran into problems with this in an open source lab product that I am building. Every student I attempt to incorporate has a fantastic understanding of algorithms and data structures, but no idea how to name things, organize code for reusability, or work with version control with large projects. TDD would be a huge plus if my peers could even stick to SOLID and a basic project architecture (what is a model and what is a view? - good luck finding a kid who can answer that). In this project about 600 LOC rely on things learned from data structures or algos, around 10,000 rely on SOLID and a basic, easy to understand architecture.
Dude, I watched this video yesterday while at work and I took the 3rd tip, I feel like a different person today, it's crazy what lack of sleep does to you, cheers!
In my opinion "the speed of typing code" has very little to do with overall productivity. Sometimes I think for minutes or even hours, mybe not even sitting in fornt of the PC, and then when I have a solution in my head i sit and dump it into code. Most important feature of IDE is quickly navigating different files and code, like "go to declaration of a method", or "find usages". Just typing the code is the least important part. It's not a race, but a highly planned and careful process.
@Dave B Well I agree with that for most common problems you just apply existing patterns. What I was refering to is the design of a completely new solution (Service, application, system, whatever). Most of the time I think about architecture, how to split into modules and components, which interactions will I need between them, how will my DB schema look like. Once I have this figured out, writing out code is not an issue. My point is, when developing a solution, writing code is like 1/3 of my time. And I have almost 7 years of professional job experience as a software engineer. I'm not refering to simple things like add another endpoint to some REST API to fetch some entity from DB, this is almost trivial in most cases. I was refering to designing and implementing a new piece of software, a complete solution from scratch. I have never found that the speed of typing code is the limiting factor, at all. For example, recently I had to implement MVP solution at my company, I spent 4 hours in front of a whiteboard, together with my teammates, brainstorming about design. Once we had all figured out, I coded entire service including flyway schema management, dockerized database for testing, full business logic in 20+ components with all relevant entities available over REST API CRUD. All of this in about 2h of coding. It's the least of my problems. I'm using Intellij Idea for my job, I'm programming backend apps in Java. If you were wondering.
@Dave B Not what to build, but how to design it. When you have a system with hundreds of microservices in a giant platform, most important part of the job is to figure out how this piece of a puzzle fits into the bigger picture. I only speak for myself I can't give you any numbers how other dev teams inside my company are doing. But me persoanlly I can give you 2 scenarios: 1.) New feature (small), optimization, bugfix, dependency upgrade: 10% thinking, 90% coding, but overall it's not a lot of time. 2.) Designing a new system/service/product: 60% planning, brainstorming, gathering data, meetings, rough design overview, and maybe 40% actually implementing it. In any case, speed of typing code is not a big factor, most of the time I spend testing my code, waiting for test to be done while thinking about the next case (TDD). I have never felt that my IDE is the bottleneck. That is my personal experience and honest opinion.
I agree and disagree. Speed is not the most important criteria to look for in a programmer. However, if a programmer can't keep up with a certain project in a competitive environment it might not be good, also certain projects have a short deadline. After all this depends on where and what you are working for.
@@hamoodrex But what do you mean by speed? I agree that programmer must be fast in finishing projects, and IMHO 90% of that is thinking without writing anything, then 10% writing the actual code, tests, docs, etc... And also, when you need to debug something or refactor, there is nothing that can beat heavy IDE. Yes, they are slow and often bloated, take a long time to start and index files... But If I had to refactor a 1k+ files java project using VIM, I would rather drink poison.
Awesome I'm also a vim user, but when using VSCode I could not find how to navigate to the file tree with keybinding and all that file stuff(create a node, move, delete) are there any new updated on the plugin that allows doing that now? Also, do you have your settings vscode file anywhere?
solid tips in my opinion, I would learn vim in general just to know that you can still program in a server without the use of a GUI rather than for speed solely, I believe vscode itself has good shortcuts too. Either way, good stuff.
This applies to any IDE or editor. I't like saying VSCode is great because: "Once you get used to the keys typing becomes really efficient and satisfying.". Pick your favorite, it's not that important. The best IDE is the one *you* know the best.
can any one help me with usefull data structure ( array , stack , queue , linked list , tree ) and algo ( linear search , binary search , bubble, heap , merge , radix quick sorts , bfs and dfs ) , any other useful dsa?
Nice tips, Ben. I recommend the book Why We Sleep by Matthew Walker for anyone who wants to learn about the inner workings of sleep. It's striking to find out just how crucial sleep is for all cognitive and motor functions, and the terrible (often overlooked) effects that sleep deprivation has.
Hi ,Ben!I have a question, currently i am starting algorithms and data structures and it gets really hard.Are there any math topics or specific knowledge shall i cover before it? Thanks!
Is Vim really that useful? I find myself thinking more than typing. Also think the mini breaks with the mouse are good for the hands to prevent some RSI.
You get the lions share of VIM productivity in VSCode by using command-x (nothing selected) to delete entire lines, command-v (nothing selected) to paste entire lines, and option+up/down to move code up and down lines. Then add the command palette for git and some other things and you've arrived.
I never got into vim. I guess that's because when I started programming professionally after the university I already knew my way around system's default shortcuts for text editing pretty well. Like all the stuff you shown I can do just by using some Ctrl/alt/meta/shift/fn/home/end... combinations without ever getting out of what vim would call "edit" mode. However I know there are some bindings vim has that I cannot find way to do without it and I would like to get used to vim because of that, but I just don't see it being worth the initial slow down.
yeah I recently got into vim and its so amazing. Say you are working on HTML or XML or whatever and you are in middle of div tag and you want to change that tag to section tag or something, you just press a shortcut and boom it changes. You don't even have to move your cursor. And ctrl+alt+shift selection is what I used to use a lot before getting into vim, but that's one extra step. Like if you want to select entire line, you press home key and then press shift+end key and then you can cut, copy, delete etc. But with vim, you just press dd or yy or cc to delete or copy or change the entire line altogether. Vim also has a ton of awesome plugins that allow you to change things like snakeCase to camelCase etc. I use it a lot while writing JPA code in java. And the best thing is that vim is ubiquitous. I can take these shortcuts with me everywhere. Today I might be programming in java using Intellij. 2mrw I might get a new job where I need to work with python using Pycharm or use react with vscode or C# with Visual Studio etc. But I don't have to relearn ide specific shortcuts, as long as I have vim(or vim extensions in those IDEs). And regular expressions are also very productive. I sometimes have to take DDL and create POJO(java classes) out of it. And some of these DDLs have 100-200 columns. If I had to type it would take a long time. With regex find and replace it takes less than 5 minutes. I can convert between DDL to Pojo and vice-versa very easily.
Hey Ben, cool. Would it be too much trouble to show the keys you are pressing when coding for the next few videos? I think many people would appreciate that since it would be easier to learn vim by going slowly through the video. Thanks for the consideration!
You can use Ctrl + End to go straight to the bottom of the file and Ctrl + Home to go up to the top in Sublime Text and I think VSCode as well (it works in my VSCode app though that may be because I have the Sublime Text key bindings extension installed).
@@bawad which coursera course is best for learning algorithms? My college teaches me nothing or I just forgot them right after my tests, please tell me, thank you so much
Most of these VIM features are already key bindings and shortcuts in other IDEs. I use IntelliJ and find it way more productive than VSCode with plugins, which quickly becomes just like VIM, super hard to configure and get right and you have to keep various sets of settings for different languages... (EDIT: I used to use vim but gave up after I tried vscode and found it way more productive)
something that blew my mind, writting node, is conditional break points. where lets say there is a loop or are parsing a file and you identified one record that breaks so you put a breakpoing and press play until you get to the one you want, but you can right click and set a conditional break point such as "whatever = 'the one you want'"
I agree 100% that Vim keybindings are helpful. I tried Vimtutor, and I even came across an online RPG that teaches you Vim, but what helped me the most was just practicing with it a little bit every day. I would practice with one Vim keybinding at a time, until I mastered it. I'm definitely not a Vim pro either, but I'm to the point where I have to install a Vim extension right after installing an editor or it just feels weird to me.
When I was young and single at the start of my programming career I could get 9.5 h sleep a night. And yeah I could code fast too and was proud of it. 10 years on I was a single parent raising 3 young children and with a high-pressure job in a startup with deadlines to meet. You have yet to be tested. But you will be. You will be forced to choose between competing priorities. You will discover what a premium it is to be young and in good health. You can review your progress in 10 or 20 or 30 years as real life catches up with you. Good luck.
VIM is okay; have been using it for quite some time now. TBH, I feel it hasn't made me any faster (maybe just a tad), or a better developer. I would definitely not prioritize learning VIM over learning more core concepts. Its a nice to have, and thats it.
sleeeeeep! yes, def. as an aside, the lack of sleep also encourages a dependency on caffeine which will double-time the path to zombiedom. I agree that bypassing non-meaningful mistakes will aid your learning tremendously. Use a linter, use a code-formatter, use find & replace, breadcrumbs, etc. Then the bulk of your time is spent analyzing your logic or exploring refactoring solutions instead of hunting down spelling errors, which is made worse by the fact that you can't navigate your editor fluently. I also use the vim keybindings for vscode but don't call myself a "vim user" anymore since I've watched some of the vim channels on youtube. Those guys are usually running some linux distro and doing EVERYTHING through vim. lol :D
kmecu Depends on the type of work you want to do. If you want to build big systems quickly with existing tools or with a team, design patterns. If you want to build new systems and products, DS/Algo. I personally put both of these things in an architectural knowledge category along with memory management and process optimization. Knowing all of these things is "important", but they don't necessarily make you a better programmer. Knowing good programming practices like SOLID is probably more important than any architectural knowledge, as you will be a good programmer by default in any language or architecture. It will help you implement big projects that you are proud to show off a lot more than algos or patterns.
3 things that gives me a competitive advantage over other developers: 1) I use emacs. It allows me to be faster than vim 2) I know Motorola 68k (This makes me better) 3) I don't sleep, I drink kombucha. The first one isn't troll.
Are you sure vim-knowledge is necessary? Have you studied VS Code's shortcuts and felt they are inferior to those that vim offers? I have printed lately a cheat sheet for VS Code and it seems it is very powerful by itself. I completely agree with you on points 2 and 3, I still need to improve my skills on algorithms (although I have a degree in math, but retaining information long-term is an issue). Sleep deprivation is killing me, I feel my IQ is 70% lower than it should be. I guess probably it's due to blue light coming from all those displays and mobile phone screen, I have ordered a special eyeglasses today, maybe that will help. Thanks for your video, all the best!
Vim knowledge is not "necessary," but neither is a color display or a comfortable keyboard. But vim knowledge will probably make you much more productive. Vim keybindings are not "shortcuts," it is ita own language of interfacing with a text editor.
@@ruhnet Vim is not to vscode what a color display is to a black and white display, that's a gross exaggeration. You can do almost everything without vim. That means you don't have to spend the time it takes to learn vim and still be super productive
@@doctormanhattan7408 You can be "productive" with Notepad or Nano. Vim, properly configured and used, is more efficient than any other editor that I know of (including VSCode). VSCode is of course extremely capable, and so are many other editors (Emacs blows anything out of the water though), but VSCode is bloated and not fast (comparatively of course--in most situations it's "fast enough"). So yes, while you can do anything with VSCode, (some things better than Vim) it's just not the best or most productive/efficient editor. And if you read my comment again, you can see I didn't pick color/bw display as an exact strict proportional representation lol (I also mentioned "comfortable keyboard"); it was just an analogy. So relax... and use VSCode if you want to haha :-D
Pro-tip: The home key goes to the top of a page, the end key goes to the bottom. We also got pageup and pagedown buttons. All sorts of things the keyboard does!
zombies all around you. Just for that subscribed & liked. Keep up the good content. You have the right mentality for SW. I agree with your points 100%, especially 2 & 3.
Lol that meme at the end. I find it astonishing that most modern education in the industrial world still have kids wake up early in the morning and have them stay in school for 7 hours a day, when study after study show that your ability to pick up information is severely impeded by lack of sleep and after 30 minutes of doing the same thing. Taking regular breaks and getting enough sleep is key to being productive.
I agree with the premise, that you need to be proficient with tools. But all examples you mentioned as an example appear to be possible without vim or emacs in any jetbrain IDE (maybe except macros? not sure about that).
You definitly should try a spacemacs or doom Emacs ,they also using vim keybiding , org mode , magit all manipulation with keyboard. Check zaiste programing RUclips series.
I do agree with the VIM in the aspect of learning the tools. Huge diference between someone that knows he's webserver, his message queue, his rdbms, his language, and yes his editor, and in that case, VIM/EMACS force you to learn. don't tell you haven't cringe and wait for a guy to press left arrow 127 times to change a parameter in console, emacs/vim command bleed into the terminal also, even here in youtube CTRL+A/E get's you to the stArt/End of the line, and most of the time deal with how guys avoid learning.
after 10 mins of searching in ur videos list and watch the wrong video, finally I know how to change updateOrder to changeOrder quickly in min 2, I always see that stuff in ur video. Thank you! I use vim in my Alpine, but never use it extensively for coding. Now I'll definitely use it.
Coursera Algorithms www.coursera.org/learn/algorithms-part1 MIT advanced data structures ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-851-advanced-data-structures-spring-2012/
i have used vim for years. but after i started using vscode, i find that the normal keybinds in vscode work just as well. also, in my case more often than not, i am limited by the speed of my BRAIN not my typing. lol
I've been learning and trying to use vim for months now, but I swear it is barely faster then using VS Code for me. The big advantage to it (for me) is that it's readily available everywhere, I can debug straight from the console if I need to run something on the university server. I also plan out my code before writing it down, so actually writing code is maybe 10-20% of my time working on a project. I'm only a CS student, not an industry pro, so take my opinion with a grain of salt, but that's my 2 cents. Vim is not the holy grail for programming, tho it does have it's advantages.
That is normal, you have to concentrate in what you think that makes you slow and find a solution, maybe creating some commands or installing plugins. For example I found vertical jumping to be very slow until I found plugins like easymotion or lights peed if you use neovim. Other personal example is creating directories. it was as slow as with a GUI editor, and even tough there are plugins for this, my personal solution was to use the terminal. Find what bother you and change it, Atom motto is "the hackable text edito for the 21th century" I believe they put "...for the 21th century" because of emacs and vim, these are very customizable editors
Point Three: Sleep-Oriented-Programming (SOP)
SOP - Semicolon is OP
SOAP - sleep-oriented-advanced-programmer :D
aka tinder developer :D
REST
Getting enough sleep should be Standard Operating Procedure (SOP)
3 Tips:
1. Using vim to boost how fast you can code.
2. Knowing data structure and algorithms.
3. Sleep more to keep a clean mind.
Can you explain nr2
9 minutes saved, thanks :)
keep note pad next to bed to write ideas down when you wake with them.
@@mikeCavalle problem is when you have the best ideas in the shower
@@dakrontu in the shower you have a whole foggy glass door to write notes on. :-)
why he's better :
1 . he uses vim.
2. he knows alot of algorithms and data structures.
3.he sleeps atleast 9hrs a day
Night
This feels like satire, unfortunately, it's not 😂
this is a satire even if it wasnt meant to be one.
I had so many great attributes of you in mind only from watching your videos, but you chose two poorly argumented and one obvious advantages
and putting them in a click baity title made this the worst video about programming I've seen this year
i agree. but those are really important to enjoy programing.
I'm fast with a mouse. Fuck Vim.
@@JonnyBeoulve not.badass.dude
It really depends on what you are building
Wait I honestly thought this was satire untill he talked about algorithms.
Ctrl+home and ctrl+end work on literally any text editor (even Microsoft Word)
@Gabriel Beauchemin he showcased some equivalent Vim shortcuts. My point is you can do that in any text editor without any setup required.
That's why I mentioned these two shortcuts SPECIFICALLY. Ofc there are many others that are not so common and readily available, I just thought it weird to mention something that is everywhere else as a Vim perk.
@@macurvello nah vim shortcuts are just op stop comparing them to these shitty cuts
@@macurvello obviously vim can do a lot more
i like your new Stephen Hawking video setup
lol he kinda looks like him tho 😂😂
ROFL
ctrl+c / ctrl+v IMO the most important for productivity is to intuitively search and scan stack-overflow for questions/answers/solutions.
You Sir, are a true developer !...Just like me
@Yog Sothothologist that's incorrect, I also never had any uses of algorithms. If you're a web developer or SE algorithms/data structures won't be much of use for you. You don't need to know the language syntax inside and out that's what documentation is for. You just need to know how to apply the knowledge itself and when to use what where.
@Yog Sothothologist SE means software engineering. github.com/Serenity1337 here's my github.
@Yog Sothothologist hey man I can answer some questions for you if you want my Reddit username is Heavy_Hole, pm me there
@@CapeSkill There are tons of work for people that can only do basic programming, where you do not need any real knowledge of algorithms and datastructures. That work also tend to be low level work that you can hire just about anyone for that has spent some time with the specific technology you want to have them programming for, which means those jobs would tend to be entry level jobs. If you need to solve some bit harder problems, then you will have a hard time finding an elegant solution or even a solution at all.
If you want to transition from writing "meh" or "okay" code to "good" or "great" code, then you need to understand a good deal of algorithms, have a good understanding of the underlaying systems, get familiar with the many different ways to write code and practise enough to know when to apply each of those tools.
How do I know this? My work includes rewriting code written by decent programmers, who have their focus on the real life problems their programs are about, and are less focused on the higher end of programming, and getting it to run much faster is not unusal, heck I have even had a 100000 times speedup before.
I feel like competitive programming usually encourages you to do stuff that would not scale well to larger applications or would not pass a thorough code review.
Could you elaborate?
@@0x6e95 Some examples: 1) proper variable names that are understandable without comments 2) modularization, aka separating it out into multiple files/namespaces etc. 3) write stuff so that it is testable, e.g interfaces, dependency injection etc. 4) exception handling; TLDR: writing something fast encourages you to take shortcuts
@@samuelschwager Those are all valid points but I sincerely doubt any developer worth their salt would ever code in a competitive programming style for production software.
You would usually only delve into CP after you've dealt with writing good production ready code so I don't really see how CP would encourage you to employ lazy coding practices for writing prod ready software. I can see that being a problem if a beginner's first foray into code was through CP but that's rarely the case.
@@0x6e95 It depends. The exercises in CP are usually quite small compared to large legacy production software. So I guess there are people that get started in CP (the easier problems) and might get hired into a 1 person team with no one who reviews their code ;)
@@0x6e95 Can we call it competitive programming and not CP...
Programmers spend only 10% of their time actually typing code.
yup, other 90% of time we watch videos on youtube :)
Yeah. Vim is fun and all, but it is _definitely_ not a significant contributor to developer performance. Lol. Only a beginner would think that.
@@jason_v12345 Yeap :) I remember watching some amateur reviewing some kind and one of his points was that writing bool==false instead of !bool is a sign of bad programmer. This Vim argument is on the same level :D
Then how to solve a problem in 30 minutes in an interview?
@@mubba1992 solve problems, more you solve, faster you do it.
"I'm not religous about vim"
Of course not, you're using in inside VScode :p
IdeaVim is way better IMO
@@slimestoneexpert9804 but that's for jetbrains ides
just use the terminal :\
I got skeptical when you start talking about VIM, which is a good advice btw, but you got my "thumbs up" with algorithms and sleep. Especially for JS developers it's so easy to get caught in the fancy lights with libraries upon libraries struggling for your attention and forget the basics.
Coming from a coding boot camp I realized that what made feel insecure about my code and scared of technical interviews was the lack of knowledge in algorithms. I am dedicating some of my free time and work with it and it has helped me greatly. I cannot tell if it really gives me a competitive advantage but it has improved my perception and confidence overall
Actually when i was younger I was thinking the same that keyboard shortcuts are that u are expert, but today, I thinking good developers are those who can name variables very well, reuse existing code, and write their code like writing a poem, without bothering with too much comments.
About the data structures course, I will add also S.O.LI.D principles and some of the Design Patterns, but this is not problem to who is better developer and who is not. Developers are poisoned with frameworks for frontend and backend and they can't understand the true power of datastructures. But if some developers can go with basic structures like queue, hash, binary tree thats ok for me. Today I respect someone if can do the S.O.L.I.D principles and refactor some code with design patterns.
Third thing i like to point for enterprise software is DDD and those who knows this very well are plenty really rare and small. In this time of career I can say that DDD, S.O.LI.D and design patterns is the backbone for quality code together with unit + integration test, but when u merge multiple developers they just do the procedural development, enhanced with high order functional functions.
Just to finish if I found someone who can model the problem in DDD way that is the hero for me.
And yes one more thing, thinking with tests in mind, this will make u more better and valuable developer, all other things will came into place.
"Actually when i was younger I was thinking the same that keyboard shortcuts are that u are expert, but today, I thinking good developers are those who can name variables very well, reuse existing code, and write their code like writing a poem, without bothering with too much comments."
Both are important. And yeah, comments should never be used to explain what the code does, only why it does it. Function names are there to explain what is being done, so use those.
"And yes one more thing, thinking with tests in mind, this will make u more better and valuable developer, all other things will came into place."
Make sure to write your unit tests *BEFORE* you write your code. It will make you think about all the different edge cases that need to be covered and allow you to streamline your development process, as you'll always know what you are working towards.
Although I am very young, I agree or even think you have understated a lot. I think SOLID and designing maintainable codebases are far more important the data structures or algorithms, and that's coming from someone applying for DS/Algo centric PhD programs and jobs. Most code has zero need for novelty and should be built to be easy to understand and extend, rather than to be efficient or elegant.
I used to do carpentry and this is somewhat akin to my observations there, 99% of the cuts and joints made on a job are simple, and should be done consistently and accessibly. For the 1% of complex work, you can have a reliable person who knows how to do that perfectly. In CS this seems to be akin to just about any library vs the work built from the library.
I recently ran into problems with this in an open source lab product that I am building. Every student I attempt to incorporate has a fantastic understanding of algorithms and data structures, but no idea how to name things, organize code for reusability, or work with version control with large projects. TDD would be a huge plus if my peers could even stick to SOLID and a basic project architecture (what is a model and what is a view? - good luck finding a kid who can answer that). In this project about 600 LOC rely on things learned from data structures or algos, around 10,000 rely on SOLID and a basic, easy to understand architecture.
Dude, I watched this video yesterday while at work and I took the 3rd tip, I feel like a different person today, it's crazy what lack of sleep does to you, cheers!
lol
LMFAO
You seem like the kind of person that would love tiling window managers like i3 for linux, or Amethyst for mac.
Any experience with them?
I haven't gotten into them yet, but I agree I'll probably love them
In my opinion "the speed of typing code" has very little to do with overall productivity. Sometimes I think for minutes or even hours, mybe not even sitting in fornt of the PC, and then when I have a solution in my head i sit and dump it into code. Most important feature of IDE is quickly navigating different files and code, like "go to declaration of a method", or "find usages". Just typing the code is the least important part. It's not a race, but a highly planned and careful process.
@Dave B Well I agree with that for most common problems you just apply existing patterns. What I was refering to is the design of a completely new solution (Service, application, system, whatever). Most of the time I think about architecture, how to split into modules and components, which interactions will I need between them, how will my DB schema look like. Once I have this figured out, writing out code is not an issue.
My point is, when developing a solution, writing code is like 1/3 of my time. And I have almost 7 years of professional job experience as a software engineer.
I'm not refering to simple things like add another endpoint to some REST API to fetch some entity from DB, this is almost trivial in most cases.
I was refering to designing and implementing a new piece of software, a complete solution from scratch.
I have never found that the speed of typing code is the limiting factor, at all.
For example, recently I had to implement MVP solution at my company, I spent 4 hours in front of a whiteboard, together with my teammates, brainstorming about design. Once we had all figured out, I coded entire service including flyway schema management, dockerized database for testing, full business logic in 20+ components with all relevant entities available over REST API CRUD. All of this in about 2h of coding. It's the least of my problems.
I'm using Intellij Idea for my job, I'm programming backend apps in Java. If you were wondering.
@Dave B Not what to build, but how to design it. When you have a system with hundreds of microservices in a giant platform, most important part of the job is to figure out how this piece of a puzzle fits into the bigger picture.
I only speak for myself I can't give you any numbers how other dev teams inside my company are doing. But me persoanlly I can give you 2 scenarios:
1.) New feature (small), optimization, bugfix, dependency upgrade: 10% thinking, 90% coding, but overall it's not a lot of time.
2.) Designing a new system/service/product: 60% planning, brainstorming, gathering data, meetings, rough design overview, and maybe 40% actually implementing it.
In any case, speed of typing code is not a big factor, most of the time I spend testing my code, waiting for test to be done while thinking about the next case (TDD). I have never felt that my IDE is the bottleneck.
That is my personal experience and honest opinion.
@@janklatka1967 you realize that Vim is by no means the only editor with those abilities, right? I can do all that in VS and more from the keyboard
I agree and disagree. Speed is not the most important criteria to look for in a programmer. However, if a programmer can't keep up with a certain project in a competitive environment it might not be good, also certain projects have a short deadline. After all this depends on where and what you are working for.
@@hamoodrex But what do you mean by speed? I agree that programmer must be fast in finishing projects, and IMHO 90% of that is thinking without writing anything, then 10% writing the actual code, tests, docs, etc... And also, when you need to debug something or refactor, there is nothing that can beat heavy IDE. Yes, they are slow and often bloated, take a long time to start and index files... But If I had to refactor a 1k+ files java project using VIM, I would rather drink poison.
How do you lint in vim? Do you run a separate program in the terminal?
It’s “Course-Era” how do you not know this..
Hey bro how many fingers do you use for typing
Thanks for your advice, I will go back to learn the 2nd item from now. The two others have them in good state at the moment.
Hello Ben, please I have an important question, which vim key bindings did you use to move the chunk of code up and down in the video at 1:48.
The key binding is ctrl +curly braces. Also you can use ctrl+f and ctrl+b.
Thank you sir. Specially for talking about how important sleep is. That is the most underrated advice ever.
What do you guys think is it important to use HJKL instead of the arrow keys in VIM?
YES, It's the vim way to do it. Never leave the homerow.
Awesome I'm also a vim user, but when using VSCode I could not find how to navigate to the file tree with keybinding and all that file stuff(create a node, move, delete) are there any new updated on the plugin that allows doing that now? Also, do you have your settings vscode file anywhere?
I use cmd+p to navigate files
gist.github.com/benawad/1e9dd01994f78489306fbfd6f7b01cd3
So I’ve never used VIM but it seems to me all these keyboard shortcuts are in IntelliJ IDEA too, so why do I need vim?
Hey Ben what is the bind key of change you do in 1:52
solid tips in my opinion, I would learn vim in general just to know that you can still program in a server without the use of a GUI rather than for speed solely, I believe vscode itself has good shortcuts too. Either way, good stuff.
Vim is great. Once you get used to the keys typing becomes really efficient and satisfying.
This applies to any IDE or editor. I't like saying VSCode is great because: "Once you get used to the keys typing becomes really efficient and satisfying.". Pick your favorite, it's not that important. The best IDE is the one *you* know the best.
can any one help me with usefull data structure ( array , stack , queue , linked list , tree ) and algo ( linear search , binary search , bubble, heap , merge , radix quick sorts , bfs and dfs ) , any other useful dsa?
I would like to know what keyboard do you use 😊
das keyboard
How did he open vimtutor on vscode? I'm on Windows 10.
I would like to add the following:
1. Design Patterns
2. Architectures
Will save you a lot of trouble solving real-life problems.
How does design pattern help when you code in JS?
@@larrycoleman8149 go study software engineering dude.
Nice tips, Ben. I recommend the book Why We Sleep by Matthew Walker for anyone who wants to learn about the inner workings of sleep. It's striking to find out just how crucial sleep is for all cognitive and motor functions, and the terrible (often overlooked) effects that sleep deprivation has.
Hi ,Ben!I have a question, currently i am starting algorithms and data structures and it gets really hard.Are there any math topics or specific knowledge shall i cover before it? Thanks!
no, just dive into algos
Do you also use the VS Code shortcuts to navigate the code or just stick to the vim shortcuts?
ruclips.net/video/t9kSTiqhUfg/видео.html
Which font style do you use?
Is Vim really that useful? I find myself thinking more than typing. Also think the mini breaks with the mouse are good for the hands to prevent some RSI.
Yes, I take breaks and think a lot too but when I'm manipulating and refactoring code vim is great
Tip #4. I got some ballin music that gets me in the zone when I code
Which shortcut do u use to change from updateOrder -> changeOrder ?
ctO
ruclips.net/video/IiwGbcd8S7I/видео.html
Is that IKEA chair? I was thinking of getting one of those... are they any good?
yeah it's a markus, I like it
Do you even use emacs evil mode on arch?
Guys what font is he using? If someone knows please let me know I want it for my code editor
@Blaxer XO alright thanks! Yea I have consolas already I use that everyday it looks so nice and clean to look at!
You get the lions share of VIM productivity in VSCode by using command-x (nothing selected) to delete entire lines, command-v (nothing selected) to paste entire lines, and option+up/down to move code up and down lines. Then add the command palette for git and some other things and you've arrived.
what is the keybinding for change into the O (timestamp 2.06)?
ctO
memorize like "[c]hange [t]il O"
Is this a vim plug in for VS code? Need answers. :(
Is it bad that I'm watching this at 2:30am? The last point cut me deep 😔
Same. But I woke up at 2 am. Went to sleep at 6pm.
just sleep until 11:30 :)
I never got into vim. I guess that's because when I started programming professionally after the university I already knew my way around system's default shortcuts for text editing pretty well. Like all the stuff you shown I can do just by using some Ctrl/alt/meta/shift/fn/home/end... combinations without ever getting out of what vim would call "edit" mode. However I know there are some bindings vim has that I cannot find way to do without it and I would like to get used to vim because of that, but I just don't see it being worth the initial slow down.
yeah I recently got into vim and its so amazing. Say you are working on HTML or XML or whatever and you are in middle of div tag and you want to change that tag to section tag or something, you just press a shortcut and boom it changes. You don't even have to move your cursor. And ctrl+alt+shift selection is what I used to use a lot before getting into vim, but that's one extra step. Like if you want to select entire line, you press home key and then press shift+end key and then you can cut, copy, delete etc. But with vim, you just press dd or yy or cc to delete or copy or change the entire line altogether. Vim also has a ton of awesome plugins that allow you to change things like snakeCase to camelCase etc. I use it a lot while writing JPA code in java. And the best thing is that vim is ubiquitous. I can take these shortcuts with me everywhere. Today I might be programming in java using Intellij. 2mrw I might get a new job where I need to work with python using Pycharm or use react with vscode or C# with Visual Studio etc. But I don't have to relearn ide specific shortcuts, as long as I have vim(or vim extensions in those IDEs).
And regular expressions are also very productive. I sometimes have to take DDL and create POJO(java classes) out of it. And some of these DDLs have 100-200 columns. If I had to type it would take a long time. With regex find and replace it takes less than 5 minutes. I can convert between DDL to Pojo and vice-versa very easily.
Hey Ben, cool. Would it be too much trouble to show the keys you are pressing when coding for the next few videos? I think many people would appreciate that since it would be easier to learn vim by going slowly through the video. Thanks for the consideration!
VSCode has a feature built in to show keypresses.
Cmd+Shift+P > Developer: Toggle Screencast Mode
tomorrows video is for you!
If this is what you think gives you a competitive edge, you're in for a rude awakening, son.
lets hear your advantages then. I am really curious.
Such valuable tips, thank you, bro!
I use vim myself and i don't see how spending a huge amount of time getting used to the shocuts can make you better
I agree and It is fun and satisfying to use. that's about it
for me i just hate using the mouse for anything
You can use Ctrl + End to go straight to the bottom of the file and Ctrl + Home to go up to the top in Sublime Text and I think VSCode as well (it works in my VSCode app though that may be because I have the Sublime Text key bindings extension installed).
True. I love vim but it's for some reason easier with sublime keybinding
nice to see vi still being used -- I started with vi in the late 70's -- there was an emacs war back then.
The war's not over yet
can you make a video of like the top shortcuts you use in vim?
I feel like we can do most of the stuff you showed us using regular vscode keybindings
benawad.com/vim
@@bawad which coursera course is best for learning algorithms? My college teaches me nothing or I just forgot them right after my tests, please tell me, thank you so much
Do you use dvorak tho
Why don't you use relative numbers in vim ?
Most of these VIM features are already key bindings and shortcuts in other IDEs. I use IntelliJ and find it way more productive than VSCode with plugins, which quickly becomes just like VIM, super hard to configure and get right and you have to keep various sets of settings for different languages... (EDIT: I used to use vim but gave up after I tried vscode and found it way more productive)
@Dr1ver key maps can be changed... 😑
Better title: How to become a better developer.
Have you heard of keys called: "Home", "End", Page Up" and "Page Down"?
something that blew my mind, writting node, is conditional break points. where lets say there is a loop or are parsing a file and you identified one record that breaks so you put a breakpoing and press play until you get to the one you want, but you can right click and set a conditional break point such as "whatever = 'the one you want'"
What's the difference between that and just putting a debugger inside an if statement?
@@doctormanhattan7408 there is none, except that you can do it in runtime.
My personal #1: Actually knowing management tools of the domain I'm in. Especially true for anything with command line management.
I agree 100% that Vim keybindings are helpful. I tried Vimtutor, and I even came across an online RPG that teaches you Vim, but what helped me the most was just practicing with it a little bit every day. I would practice with one Vim keybinding at a time, until I mastered it. I'm definitely not a Vim pro either, but I'm to the point where I have to install a Vim extension right after installing an editor or it just feels weird to me.
When I was young and single at the start of my programming career I could get 9.5 h sleep a night. And yeah I could code fast too and was proud of it. 10 years on I was a single parent raising 3 young children and with a high-pressure job in a startup with deadlines to meet. You have yet to be tested. But you will be. You will be forced to choose between competing priorities. You will discover what a premium it is to be young and in good health. You can review your progress in 10 or 20 or 30 years as real life catches up with you. Good luck.
possible solution: don't have kids, screen out positions that do not prioritize your life?
So don't have kids then.
@@omar9987 thats a stupid solution, kids are our future.
A better solution is: staying at home and raising your children right while the man provides.
@@daonlyowner6631 The future is the sun devouring the earth.
@@omar9987 Oh thats settled then. Feel free to lead by example and take yourself out.
VIM is okay; have been using it for quite some time now. TBH, I feel it hasn't made me any faster (maybe just a tad), or a better developer. I would definitely not prioritize learning VIM over learning more core concepts. Its a nice to have, and thats it.
Another great video Ben. Thank you.
Where did you go to college?
Showing people you can use Vim is the ultimate alpha power move.
Some world changing features that are not present in every editor.
Is Leetcode good practice for data structures and algorithms?
sleeeeeep!
yes, def. as an aside, the lack of sleep also encourages a dependency on caffeine which will double-time the path to zombiedom.
I agree that bypassing non-meaningful mistakes will aid your learning tremendously. Use a linter, use a code-formatter, use find & replace, breadcrumbs, etc. Then the bulk of your time is spent analyzing your logic or exploring refactoring solutions instead of hunting down spelling errors, which is made worse by the fact that you can't navigate your editor fluently.
I also use the vim keybindings for vscode but don't call myself a "vim user" anymore since I've watched some of the vim channels on youtube. Those guys are usually running some linux distro and doing EVERYTHING through vim. lol :D
Would you say learning design patterns is less important than data structures and algorithms?
kmecu Depends on the type of work you want to do. If you want to build big systems quickly with existing tools or with a team, design patterns. If you want to build new systems and products, DS/Algo. I personally put both of these things in an architectural knowledge category along with memory management and process optimization. Knowing all of these things is "important", but they don't necessarily make you a better programmer.
Knowing good programming practices like SOLID is probably more important than any architectural knowledge, as you will be a good programmer by default in any language or architecture. It will help you implement big projects that you are proud to show off a lot more than algos or patterns.
3 things that gives me a competitive advantage over other developers:
1) I use emacs. It allows me to be faster than vim
2) I know Motorola 68k (This makes me better)
3) I don't sleep, I drink kombucha.
The first one isn't troll.
kombucha dissolve my organs
what the heck is motorola 68k?
@@blasttrash they probably mean motorola 68k assembly idk
Please share, How and what resources you used to learn new technologies?
docs
Awesome video Ben. Thanks for sharing the knowledge. Going to check out VIM 👍
Is MIT course good? Or should I rather go for coursera?
watch the first video of each and pick the format you like better
Are you sure vim-knowledge is necessary? Have you studied VS Code's shortcuts and felt they are inferior to those that vim offers? I have printed lately a cheat sheet for VS Code and it seems it is very powerful by itself.
I completely agree with you on points 2 and 3, I still need to improve my skills on algorithms (although I have a degree in math, but retaining information long-term is an issue).
Sleep deprivation is killing me, I feel my IQ is 70% lower than it should be. I guess probably it's due to blue light coming from all those displays and mobile phone screen, I have ordered a special eyeglasses today, maybe that will help.
Thanks for your video, all the best!
Vim knowledge is not "necessary," but neither is a color display or a comfortable keyboard. But vim knowledge will probably make you much more productive. Vim keybindings are not "shortcuts," it is ita own language of interfacing with a text editor.
@@ruhnet Vim is not to vscode what a color display is to a black and white display, that's a gross exaggeration. You can do almost everything without vim. That means you don't have to spend the time it takes to learn vim and still be super productive
@@doctormanhattan7408 You can be "productive" with Notepad or Nano. Vim, properly configured and used, is more efficient than any other editor that I know of (including VSCode). VSCode is of course extremely capable, and so are many other editors (Emacs blows anything out of the water though), but VSCode is bloated and not fast (comparatively of course--in most situations it's "fast enough"). So yes, while you can do anything with VSCode, (some things better than Vim) it's just not the best or most productive/efficient editor. And if you read my comment again, you can see I didn't pick color/bw display as an exact strict proportional representation lol (I also mentioned "comfortable keyboard"); it was just an analogy. So relax... and use VSCode if you want to haha :-D
Every programmer Guru on internet: So you summoned me?
Used the 3rd tip today feeling like a charm.
idk why, but this video motivated me a lot
the double g thing to go from the top to the bottom of a page if vs code works like most other apps then thats what the home and end keys are for
for me learning tmux did a lot, but it really depends on the kind of programming youre doing if it's even worth looking at
tmux is great
copy-mode-vi for life
Pro-tip: The home key goes to the top of a page, the end key goes to the bottom. We also got pageup and pagedown buttons. All sorts of things the keyboard does!
and there's Ctrl + Left/Right arrow to move between spaces in a line
Thank you Ben for this, this was really helpful
zombies all around you. Just for that subscribed & liked. Keep up the good content. You have the right mentality for SW. I agree with your points 100%, especially 2 & 3.
its been 6months since i to neovim on linux, dude i love it.
I may add that you should sleep after lunch around 20 minutes, I always do that even at work
Tried that a few times and every time woke up 4 hours later with a headache xD
Here's an idea.
Next up or down open line/space
Lol that meme at the end. I find it astonishing that most modern education in the industrial world still have kids wake up early in the morning and have them stay in school for 7 hours a day, when study after study show that your ability to pick up information is severely impeded by lack of sleep and after 30 minutes of doing the same thing. Taking regular breaks and getting enough sleep is key to being productive.
I agree with the premise, that you need to be proficient with tools.
But all examples you mentioned as an example appear to be possible without vim or emacs in any jetbrain IDE (maybe except macros? not sure about that).
You definitly should try a spacemacs or doom Emacs ,they also using vim keybiding , org mode , magit all manipulation with keyboard. Check zaiste programing RUclips series.
I do agree with the VIM in the aspect of learning the tools.
Huge diference between someone that knows he's webserver, his message queue, his rdbms, his language, and yes his editor, and in that case, VIM/EMACS force you to learn.
don't tell you haven't cringe and wait for a guy to press left arrow 127 times to change a parameter in console, emacs/vim command bleed into the terminal also, even here in youtube CTRL+A/E get's you to the stArt/End of the line, and most of the time deal with how guys avoid learning.
Nail on the head with the last one. Sleep dep kills your ability to do anything. Total false economy working really long hours.
Thanks for the sleep suggestions, something I am really bad at.
after 10 mins of searching in ur videos list and watch the wrong video, finally I know how to change updateOrder to changeOrder quickly in min 2, I always see that stuff in ur video. Thank you! I use vim in my Alpine, but never use it extensively for coding. Now I'll definitely use it.
Thank you sir!
Coursera Algorithms
www.coursera.org/learn/algorithms-part1
MIT advanced data structures
ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-851-advanced-data-structures-spring-2012/
Thanks Ben 😊👍
‘The reason is because my class was actually really bad’ LOL I couldn’t be worse than my class.
i have used vim for years. but after i started using vscode, i find that the normal keybinds in vscode work just as well. also, in my case more often than not, i am limited by the speed of my BRAIN not my typing. lol
I've been learning and trying to use vim for months now, but I swear it is barely faster then using VS Code for me. The big advantage to it (for me) is that it's readily available everywhere, I can debug straight from the console if I need to run something on the university server. I also plan out my code before writing it down, so actually writing code is maybe 10-20% of my time working on a project.
I'm only a CS student, not an industry pro, so take my opinion with a grain of salt, but that's my 2 cents. Vim is not the holy grail for programming, tho it does have it's advantages.
That is normal, you have to concentrate in what you think that makes you slow and find a solution, maybe creating some commands or installing plugins.
For example I found vertical jumping to be very slow until I found plugins like easymotion or lights peed if you use neovim. Other personal example is creating directories. it was as slow as with a GUI editor, and even tough there are plugins for this, my personal solution was to use the terminal.
Find what bother you and change it, Atom motto is "the hackable text edito for the 21th century" I believe they put "...for the 21th century" because of emacs and vim, these are very customizable editors
I completely agree with the sleeping fact and algorithms
but the code you showed is not what a Better Developer will write
That's the whole point of this vid, there's an easily readable irony...
Like watching TechLead but actually funny.
I use vim all the time as a Jr Admin...Moving towards web dev and missed it in vs code