从 Hello world 风格的简单程序转向大型/现实世界项目:现实世界项目指南
请有人使用适当的标签重新标记
你好,
这是我的故事,但我想这对所有程序员都适用。
我们从一些简单的 Hello World 程序开始编程。我们练习&将函数/类添加到程序中。但他们仍然保持着Hello World的风格。函数调用一些其他函数标准库。
但是当涉及到现实世界的项目时(我只熟悉开源)。还有更多其他的事情出现在画面中。接下来就开始了这个新手程序员的艰辛。
项目流程:
- 程序未按预期运行。使用调试器
- 利用第三方库。今天,我们有 每种流行语言的库 几乎我们需要的一切。
- 多人从事同一项目。使用版本控制 系统。
- 项目规模越来越大。 构建自动化
- 很多人开始使用您的应用程序。您需要将其移植到 不同的平台(操作 系统/架构)。需要 交叉编译
- 我不知道为什么,但我们需要单元测试框架和/或单元测试
- 还有什么???
这里的问题是这个新手程序员缺乏对这些东西的存在的了解。
我的意思是当我开始研究一些现实世界的项目(开源)时。我不知道这是什么?为什么我们需要这样做?
$./configure
$make
$make install
最近我意识到关键字“构建自动化”。我需要一些可用于 Linux 的库,但我需要在 Windows 中使用它。我不知道它被称为“交叉编译”,并且有像 MinGW/MSYS 这样的工具用于此目的。我必须通过艰苦的方式来学习这些东西。我希望有人告诉我这样的事情的存在。那会节省我很多时间。
今天我遇到了性能问题,并且感觉需要一些东西。我想我正在寻找的是 Profiler。感谢我参与开源项目。尽管我没有意识到/感觉到有必要这样做,但我知道术语单元测试。
虽然这种(困难的)学习方式有像现在这样的一些很大的优势,但我能够快速找出解决方案或某些未知的事情&与我的其他朋友不同,我在任何时候都不会受到打击。但我讨厌浪费时间。你不相信我浪费了多少时间来弄清楚 Makefiles
和Gnu 构建系统
那么,我在这篇文章中要寻找什么?
- 请完成
项目流程
。我想看看所有的事情都涉及什么。 - 对于
项目流程
列表中的每个任务。我想查看以下信息。- 提供最流行的解决方案/工具。
- 维基百科列出了所有替代方案。
- [可选]推荐一些好书/教程/指南来学习这方面的知识。或者链接到相关的 SO 帖子/标签。
- 我知道有些东西是语言和语言。操作系统特定。我想说,我们只有少数主要平台 Linux/Unix、Windows、Java、.NET 和少数主要语言 C、C++、Java、.NET、Python。解决这些语言。已经绰绰有余了。
示例:
利用库:
- 库以下列任意形式分发
- 来源分布
- 静态库(*.lib 适用于 Windows / *.a 适用于 Linux)
- 动态库(.dll(适用于 Windows)/.so(适用于 Linux)
- .NET 程序集
- 我不懂java
资源(现在,一旦我知道了上述信息,我就可以自己搜索资源了)
- 库以下列任意形式分发
注意:
请注意,我并不是要求提供有关如何学习这些内容的信息。我问的是还涉及哪些类似的事情以及每种事情的替代方案。
Somebody please re-tag with appropriate tags
Hello,
This is my story but I guess it holds true for all programmers.
We begin programming with some simple Hello World program. We practice & add functions/classes to the program. But they still maintain the Hello World style. function calling some other functions standard library.
But when it comes to real world projects(I'm just familiar with OpenSource). Lot more other things come into picture. Then begins the hardships of this newbie programmer.
Project Flow:
- Program is not running as expected. Make use of Debugger
- Making use of third party libraries. Today, we have
library in every popular language for
almost everything we need.- Multiple persons working on same project. Using Version Control
Systems.- Project is growing big. Build Automation
- Lot of people started using your application. You need to port it to
different platforms (operating
systems/architectures). Need for
Cross Compiliation- I don't know why but we need Unit Testing Framework and/or unit tests
- What else???
The problem in this is the lack of knowledge of this newbie programmer about existence of these things.
What I mean is when I started looking into some real world projects(Opensource). I didn't know what is this? and why we need to do this?
$./configure
$make
$make install
Recently I became aware of the keyword "Build Automation". I was in need of some library which was available for linux but I needed it in windows. I didn't know that its called "Cross compilation" and tools like MinGW/MSYS exist for this purpose. I had to learn these things in the hard way. I wish some one has told me about existence of such things. That would have saved my lot of time.
Today I ran into performance problem and was feeling the need for something. I guess the thing I'm looking for is Profiler. Thanks to my involvement in opensource projects. Even though I didn't realized/felt the need for this, I'm aware of term Unit Testing.
Though this (hard)way of learning things has some big advantages like now, I'm able to figure out solution or some unknown thing very quickly & unlike my other friends I don't get struck at any point. But I hate the wastage of time involved. You do not believe how much I time I wasted in figuring out the Makefiles
& Gnu Build System
So, what am I looking for this in this post?
- Please complete the
Project Flow
. I want to see what all things are involved. - For each of the tasks in the
Project Flow
list. I want to see following information.- Most popular solutions/tools availabe.
- Wikipedia list to all alternatives.
- [optional] Suggest some good books/tutorials/guides for learning about this. Or link to relavent SO posts/tags.
- I know somethings are language & OS specific. I would say we have only handful of major platforms Linux/Unix, Windows, Java, .NET and handful of major languages C, C++, Java, .NET, Python. Address these languages. Its more than sufficient.
Example:
Making use of libraries:
- Libraries are distributed in any of the following forms
- Source Distrubtion
- Static Libraries(*.lib for windows / *.a for linux)
- Dynamic Libraries (.dll for windows /.so for linux)
- .NET assemblies
- I don't know about java
Resources (Now, once I know the above info. I can search on my own for resources)
- Libraries are distributed in any of the following forms
Note:
Please not that I'm not asking to suggest info on how to learn each of these things. I'm asking about what more such kind of things are involved and alternatives for each of them.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的问题似乎太宽泛,但在评论中您要求提供不同方法的示例。这至少可以让你找到一些其他的指导并做出自己的决定。
这些以及更多都是软件开发方法,其中包括不同的原则、流程和角色。他们中的大多数还带有一些用于不同目的的实践,例如您在问题中提到的实践。尽管许多公司使用不同的组合以及一些自己的流程和方法,但这些在现实世界中应用相当广泛。形式化方法虽然不是被广泛使用的方法的一部分,但可能会给您带来一些有趣的开发观点,它很精确,但大多数时候太不切实际了。
Your question seems to be too broad, but in comments you asked for examples of different methods. This would at least enable you to find some other pointers and make your own decisions.
Those and many more are software development methods, which comprise of different principles, processes and roles. Most of them also come with some sets of practices for different purposes, e.g. ones you mention in your question. Those are quite widely used in real world, although many companies use different combinations and also some own processes and methods. What is not part of what is used so widely, but might give you some interesting views on development are formal methods, which are precise, but most of the time too unpractical.