51自学网adc自学书_我必须自学的5件事,学校没有
51自學網adc自學書
I consider myself to be in a fortunate position at this point in my life. I recently moved out into a house with my girlfriend, I adopted three wonderful kitties, and more all during this pandemic. I was also very fortunate to keep my job as a junior software developer.
我認為自己在這一生中處于有利地位。 最近,我和女友搬進了一所房子,收養了三只奇妙的小貓,在這場大流行中更多。 我也很幸運能繼續擔任初級軟件開發人員的工作。
I started working as a junior developer around late August of 2019, right at the start of my junior year of college. We are a small, but growing managed service provider. Before then, I was (and still am) working on a freelancing project that kick started my passion for building software that school never could.
我在大學三年級剛開始時,大約在2019年8月下旬開始擔任初級開發人員的工作。 我們是一家規模雖小但正在成長的托管服務提供商。 在那之前,我(現在還在)正在從事一項自由職業項目,這激發了我對構建學校從未有過的軟件的熱情。
In starting my freelance project, I began to see that there were a lot of pieces to being in this field that school just doesn’t teach. Some of these things were reinforced when I started working and other new ones popped up. Some of the things I learned relate to technology and others not so much. Either way, the role of developer is now constantly changing and growing. Developers now do back-end and front-end, database administration, deployments, and more.
在開始我的自由職業者項目時,我開始發現,在這個領域中有很多東西是學校根本不教的。 當我開始工作時,其中一些事情得到了加強,而其他新事物又彈出了。 我學到的一些東西與技術有關,而其他東西則很少。 無論哪種方式,開發人員的角色現在都在不斷變化和增長。 開發人員現在可以進行后端和前端,數據庫管理,部署等等。
Now, as I enter my senior year of school, I would like to take a step back and reflect on what I learned from being in the field that school never did teach me. Here are the top five things that school did not teach me.
現在,當我進入高中時,我想退后一步,回顧一下我從該領域中學到的知識,即學校從未教過我。 這是學校沒有教我的最重要的五件事。
1.語言并不重要,至少在您的思維方式上 (1. Language doesn’t matter, at least in the way you think)
My programming journey began in 2015 with Java and continued into 2016 with C#. After graduating high school, I entered college where I took C++ and Advanced Java. My next semester I took a formal C# course, along with HTML and CSS. I eventually took an Assembly Language and a Javascript class as well.
我的編程之旅始于2015年使用Java的過程,一直持續到2016年使用C#。 高中畢業后,我進入大學學習了C ++和Advanced Java。 下個學期,我學習了HTML和CSS以及C#的正式課程。 我最終也學習了匯編語言和Javascript類。
I remember sitting in these classes thinking “Wow this language is so great I’m going to use it for everything”. And unfortunately this is not how the real world works. Worse off is the teachers made each language seem like the definitive, best way to write software. My C++ teacher would rag on Java, and my Java teacher would rag on C++. It lead to a lot of confusion in what I should focus on.
我記得坐在這些班級時曾想過:“哇,這門語言太棒了,我將在所有方面使用它”。 不幸的是,這不是現實世界的工作方式。 更糟糕的是,教師使每種語言看起來像是確定的,最佳的軟件編寫方式。 我的C ++老師會使用Java,而Java老師會使用C ++。 這引起了我應該關注的重點的混亂。
Then once I started working and freelancing, it hit me. It doesn’t matter, or at least as much as you might think. The thing is, each language, framework, library, all has their place in the world of software. Want to quickly build and prototype a new application? There’s Python, Ruby, and NodeJS. Need a type safe, compute intensive application? Have a crack at Java, C#, or Go. Have to work at a hardware level where performance is a concern? Well try out C++ or Rust. Each one of these languages is the right tool for some kind of job.
然后,一旦我開始工作和自由職業,它就打擊了我。 沒關系,或者至少與您想像的一樣。 關鍵是,每種語言,框架,庫在軟件領域中都有各自的位置。 是否想快速構建新應用程序并制作原型? 有Python,Ruby和NodeJS。 需要類型安全,計算密集型應用程序嗎? 精通Java,C#或Go。 是否必須在關注性能的硬件級別上工作? 好吧,嘗試一下C ++或Rust。 這些語言中的每一種都是執行某種工作的正確工具。
When I started my freelance project, I had to sit down and look at what was needed. I had to think about scalability, time to develop, features they wanted in version 1.0 and wanted to add later on. I eventually settled on a Java Spring API connected to a PostgreSQL database. For the front end I settled initially on Angular, but I hit some limitations in it, so I moved over to React. The choices here were simple; all the technology is open source, PostgreSQL has a ton of features for me to take advantage of, Java and Spring let us build a rigid but scalable API that can do some serious processing very quickly, and React let us create a responsive UI that we can then turn and do things like Server Side Rendering and create a Progressive Web App with very easily. At work, we use .NET tools and libraries because it quickly allows us to build the products our clients need. What makes it easier is that most of them are on Azure and Azure SQL Server, so we can deploy their applications very easily as well as have a database that integrates seamlessly into our stack.
當我開始自由職業項目時,我不得不坐下來看看需要什么。 我必須考慮可伸縮性,開發時間,他們在1.0版中想要并在以后添加的功能。 我最終決定使用連接到PostgreSQL數據庫的Java Spring API。 對于前端,我最初選擇了Angular,但是遇到了一些限制,因此我轉到了React。 這里的選擇很簡單。 所有技術都是開源的,PostgreSQL有很多功能可供我利用,Java和Spring讓我們構建了一個可擴展的剛性API,可以非常快速地進行一些認真的處理,而React讓我們創建了一個響應式UI,然后可以輕松地執行諸如服務器端渲染之類的事情,并輕松創建Progressive Web App。 在工作中,我們使用.NET工具和庫,因為它可以使我們快速構建客戶所需的產品。 更容易的是,它們中的大多數都位于Azure和Azure SQL Server上,因此我們可以非常輕松地部署它們的應用程序,并擁有一個無縫集成到我們堆棧中的數據庫。
Lesson learned: No language is one-size-fits-all, each has their own strengths and weaknesses that make some better than others for specific tasks.
獲得的經驗:沒有一種語言能千篇一律,每種語言都有自己的長處和短處,它們在某些特定任務上比其他語言要好。
2. Git(或任何版本控制) (2. Git (or any version control))
Git is one of those things that I had to learn myself. It took me a lot longer than I would like to admit and I am by no means an expert in it, but Git is one of those things that would have been great to have learned as apart of some programming class. Instead, we had to zip up and submit our files that way. It’s not a bad way to manage applications in that setting, but really doesn’t teach you how or why version control is so important.
Git是我必須學習的東西之一。 我花了很多時間比我想承認的要長得多,而且我絕不是專家,但是Git是其中的一門,對某些編程課來說,這是一件很棒的事情。 相反,我們不得不以這種方式壓縮并提交文件。 在那種情況下管理應用程序不是一個壞方法,但實際上并沒有告訴您版本控制的重要性。
Version control is essential to modern software development. From small to large projects, it’s crucial to writing and maintaining code. In my own daily workflow, I create a project and push all the initial files to the master branch. Then I create a develop branch that contains all the initial files from master. When I go to create a feature, I create a new branch with that feature name. After I complete it, I merge it back with develop for testing to make sure it works with the any other features that were worked on. Then I merge with master and push to production. Here then I use tags to denote the version being pushed up. If a version starts failing, I can easily roll back to a version I know works.
版本控制對于現代軟件開發至關重要。 從小型項目到大型項目,編寫和維護代碼都是至關重要的。 在我自己的日常工作流程中,我創建一個項目并將所有初始文件推送到master分支。 然后,我創建一個develop分支,其中包含master的所有初始文件。 當我創建功能時,會使用該功能名稱創建一個新分支。 完成之后,我將其與開發進行合并以進行測試,以確保它可以與其他已使用的功能一起使用。 然后,我與主人合并并開始生產。 然后在這里,我使用標簽來表示要推送的版本。 如果某個版本開始出現故障,我可以輕松地回滾到我知道可以使用的版本。
Version control is really a skill that should be taught in school. As developers are taking on more and more rolls in the workplace, knowing this part of the software development life cycle is crucial to success in the workplace. It’s also crucial to helping developers get jobs. Putting your projects on a platform like GitHub is how potential employers can go and look at what you’ve done, like a portfolio for your software.
版本控制實際上是一項應該在學校教授的技能。 隨著開發人員在工作場所中扮演越來越多的角色,了解軟件開發生命周期的這一部分對于在工作場所取得成功至關重要。 這對幫助開發人員獲得工作也至關重要。 將您的項目放在GitHub之類的平臺上,是潛在雇主可以如何查看您所做的事情,例如軟件組合。
Lesson Learned: Git and version control is an extremely important tool for developing software and for building your development portfolio.
經驗教訓:Git和版本控制是用于開發軟件和構建開發產品組合的極其重要的工具。
3.客戶關系 (3. Client Relations)
This one is a little less technical, but still extremely important to the life of a developer. In my schooling, client relationships were brought up in my Systems Design class, but only for discussing planning and for taking the plans and turning them into technical documents such as Entity Relationship Diagrams. It was more on the process and less on the client.
這一點技術性較低,但對于開發人員的生命仍然非常重要。 在我的學校里,客戶關系是在我的系統設計課程中建立的,但僅用于討論計劃,制定計劃并將其轉變為技術文檔,例如實體關系圖。 它更多地在流程上,而在客戶上則更少。
One of the first things I realized when I started building software for others is that everybody is completely different in their levels of understanding technology. Some people have a grasp on it and understand your technical specifications and can ask questions, others think you sit at your desk all day with a magic wand and pull things out of the air with the flick of the wrist without realizing how much time or process goes into actually building something.
當我開始為他人構建軟件時,我意識到的第一件事是,每個人對技術的理解水平完全不同。 有些人對此有所了解,并了解您的技術規格并可以提出問題,另一些人則認為您整日坐在魔杖旁,只需輕輕一揮手腕就可以將物品從空中拔出,而沒有意識到需要多少時間或過程實際建造東西。
It’s important to know this when dealing with anyone outside of software development. Sometimes you can geek out and discuss specifications in detail and other times you have to manage exceptions without talking about the tech parts at all. Sometimes you deal with bugs or issues for days and only have it come back as a user error. Things like that happen and that’s okay.
與軟件開發之外的任何人打交道時,務必要了解這一點。 有時,您可以瀏覽和詳細討論規范,而有時您必須管理異常而根本不談論技術部分。 有時您要處理幾天的錯誤或問題,而只是將其作為用戶錯誤返回。 這樣的事情發生了,沒關系。
Some things that are important to remember are being open and realistic with the client, no matter if you’re in the planning, testing, or bug fixing stages of development. Don’t be afraid to speak up if you have an idea that you think may work better than what is being proposed, but be respectful about it. Understand who you are talking with and their level of technical insight. Having a healthy client relationship is key to making great software.
無論您處于開發的計劃,測試還是錯誤修復階段,與客戶保持開放和現實都是要記住的一些重要事情。 如果您有一個想法認為自己的工作效果可能比提出的建議更好,請不要害怕大聲疾呼,但請尊重。 了解您正在與誰交談以及他們的技術見識水平。 建立良好的客戶關系是制作出色軟件的關鍵。
Lesson Learned: Managing and maintaining healthy relationships with clients is just as important as writing good code.
經驗教訓:管理和維護與客戶的健康關系與編寫良好的代碼一樣重要。
4.部署軟件 (4. Deploying Software)
Maybe this one is a little unfair, but seeing as how developers are having to take more rolls on and learn more skills, I think this is an important topic to touch on. This is more important than ever now with the advent and embrace of cloud computing. Developers are now needing to know how to deploy applications to the cloud, whether that be on AWS or Azure or Google Cloud Platform, this is skill is very important.
也許這有點不公平,但是鑒于開發人員必須付出更多努力并學習更多技能,我認為這是一個很重要的話題。 隨著云計算的出現和普及,這比現在更加重要。 開發人員現在需要知道如何將應用程序部署到云(無論是在AWS還是Azure或Google Cloud Platform上),這項技能非常重要。
You just built a shiny new app and you’re ready to share it with the world. Now what? What do you go with it? You go online and lookup how to host a website. You now realize you need a domain, a cloud provider to host it on, setup Nginx or Apache to serve your pages, configure firewall rules and holy cow you’re going to explode. Now today, tools like Netlify and GitHub Pages make this so, so much easier to do so static sites, but what about sites that aren’t static?
您剛剛構建了一個閃亮的新應用,并準備與世界分享。 怎么辦? 你怎么辦呢? 您上網查看了如何托管網站。 現在,您意識到需要一個域,一個云提供商來托管它,設置Nginx或Apache來服務您的頁面,配置防火墻規則以及您將要爆炸的圣牛。 如今,使用Netlify和GitHub Pages之類的工具可以使靜態站點變得如此容易,但是非靜態站點又如何呢?
I’m not saying cloud computing should be taught in school because there are so many providers with services and features. But I think, at least in Linux or Linux Administration classes, things like Nginx/Apache, where static files go, how to configure firewall rules, and all that should be taught. My introduction to Linux class focused a lot basic commands and RegEx. All of that is very important in doing work in Linux, but things like command line messenger systems really do not seem as important as knowing how to configure Nginx.
我并不是說應該在學校里教授云計算,因為有這么多提供服務和功能的提供商。 但是我認為,至少在Linux或Linux Administration類中,諸如Nginx / Apache之類的東西,靜態文件存放在哪里,如何配置防火墻規則以及所有這些都應該教。 我對Linux類的介紹集中了很多基本命令和RegEx。 所有這些對于在Linux中進行工作都是非常重要的,但是諸如命令行Messenger系統之類的事情實際上并不像了解如何配置Nginx那樣重要。
Lesson Learned: Again, maybe this section was unfair, but I think it’s important to know how to deploy your software, or at the very least, some different options for deployment and configuration.
經驗教訓:再次,也許這部分是不公平的,但是我認為了解如何部署軟件,或者至少是一些不同的部署和配置選項很重要。
5.如何編寫軟件 (5. How to write software)
This may seem kinda stupid, but all throughout my schooling, I never learned how to actually write a piece of software. What I learned in school was syntax and theory, but not how to actually write software. In my five, almost six years of studying computer science, I have about 1.5 projects I would consider to be pieces of usable software.
這似乎有點愚蠢,但是在我整個學習過程中,我從未學會如何實際編寫軟件。 我在學校中學到的是語法和理論,而不是如何實際編寫軟件。 在我學習計算機科學的五年(將近六年)中,我大約有1.5個項目將被視為有用的軟件。
The 0.5 one was a bank account management app in C++, except all the values in it were hard coded. There was not dynamic input and output and the logic flow was very clunky. You had to have it do specific things on specific dates, which again were events that had to be hard coded. The only full project I did was a Java FX text editor that could read files and be edited and then saved back out. It was completely standalone and had no database or configurations or syntax highlighting or anything fancy, but it made me feel good that I made it.
0.5是C ++中的銀行帳戶管理應用程序,除了其中的所有值都是硬編碼的。 沒有動態輸入和輸出,邏輯流程非常笨拙。 您必須讓它在特定的日期做特定的事情,這又是必須硬編碼的事件。 我做的唯一的完整項目是Java FX文本編輯器,它可以讀取文件并進行編輯,然后保存回來。 它是完全獨立的,沒有數據庫,配置,語法突出顯示或任何花哨的內容,但是讓我感到非常滿意。
All the other projects we did were either completed with some fill in the blanks or just theoretical “this is how a for loop works under the hood” kind of examples. It wasn’t until I started freelancing that I began to understand how software all fits together. I learned about database connections, REST API’s, security practices, JWT tokens, and much, much more. I look at it like school taught me how to code and the real world taught me how to write software. Knowing how to write a LinkedList is very different from knowing where and how to use a LinkedList.
我們所做的所有其他項目都以一定的空白填補,或者只是理論上的“這就是for循環在幕后的工作方式”之類的例子。 直到我開始自由職業時,我才開始理解軟件如何組合在一起。 我了解了數據庫連接,REST API,安全性實踐,JWT令牌等等。 我看著它就像學校教我如何編碼,而現實世界教我如何編寫軟件。 知道如何編寫LinkedList與知道在哪里以及如何使用LinkedList有很大的不同。
Lesson Learned: Knowing how to write code is not the same thing as knowing how to write software.
獲得的經驗:知道如何編寫代碼與知道如何編寫軟件不是一回事。
I know I keep saying it, but developers are taking on more and more roles and this is creating a divide in what schools teach and what people do in their daily lives. We need to know how to architect applications, deploy them, and version them. We need to know multiple languages and where they are useful. We need to know how to communicate with clients and how make what they want a reality.
我知道我一直在說這句話,但是開發人員正在扮演越來越多的角色,這在學校教的內容和人們的日常生活中造成了分歧。 我們需要知道如何構建應用程序,對其進行部署以及對其進行版本控制。 我們需要知道多種語言以及它們在什么地方有用。 我們需要知道如何與客戶溝通以及如何使他們想要的東西成為現實。
Maybe I was unfair to our computer science curriculum in some areas and really, I did not mean to be. These were just some of the things that I had to learn myself when I started doing this in the real world. Things like Git were never mentioned in any of my classes, I thought I had to commit to learning one language and stick to it forever, I had no idea Cloud Computing or Apache or Nginx existed, let alone how to use them. These things are all really important in today’s world. It’s where things like bootcamps have really started to pickup in popularity, along with online courses on Udemy and Pluralsight. Those camps and platforms give you resources to learn how to do everything I had discussed before. It was how I learned to do these things.
也許我在某些領域對我們的計算機科學課程不公平,實際上,我并非故意如此。 這些只是我在現實世界中開始學習時必須學習的一些東西。 像Git這樣的事情在我的所有課程中都從未提到過,我以為我必須致力于學習一種語言并永遠堅持下去,我不知道云計算,Apache或Nginx的存在,更不用說如何使用它們了。 這些東西在當今世界都非常重要。 在這里,像訓練營之類的東西以及有關Udemy和Pluralsight的在線課程開始真正開始流行。 這些訓練營和平臺為您提供了學習我以前討論過的所有方法的資源。 這就是我學會做這些事情的方式。
Do curriculum's need to be looked at? Most likely. Colleges do have their value in computer science programs. For instance, it lays a good foundation in languages, shows you how and why things work how they do, and gives you access to things like clubs. But I do believe what they teach needs to grow and change to better prepare graduates for actually working in the industry.
是否需要考慮課程設置? 最有可能的。 大學在計算機科學程序中確實具有其價值。 例如,它為語言打下了良好的基礎,向您展示了事物如何以及為什么起作用,并且使您可以訪問諸如俱樂部之類的事物。 但我確實相信,他們所教的內容需要不斷發展和變化,以更好地為畢業生做好實際在該行業工作的準備。
翻譯自: https://medium.com/the-innovation/software-development-five-things-i-had-to-teach-myself-that-school-didnt-2db2737be0bb
51自學網adc自學書
總結
以上是生活随笔為你收集整理的51自学网adc自学书_我必须自学的5件事,学校没有的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 零基础EVE环境搭建:①EVE的下载与介
- 下一篇: 实体业怎么通过线上渠道获客 互联网获客方