В связи с началом акции по зачистке статей от мусора мы еще раз напоминаем: перед тем, как начинать редактировать статьи, крайне желательно ознакомиться с руководством по редактированию — особенно с той его частью, что касается использования тэгов ref и strike. И потом не говорите, что вас не предупреждали.
Программист
Материал из Lurkmore.
ZOMG TEH DRAMA!!!11 Обсуждение этой статьи неиллюзорно доставляет не хуже самой статьи. Рекомендуем ознакомиться и причаститься, а то и поучаствовать, иначе впечатление будет неполным. |
Программист (Прогер, ЭВМщик, ФГМщик) — это человек, который пишет программы. Программисты делятся на архитекторов (помимо хардкорного скила кодинга, умеют проектировать взаимосвязь кодируемого софта и организовывать низшее быдло), собственно программистов (основная рабочая сила, набивают код), быдлокодеров и хеллоуворлдщиков (расположены в порядке убывания профессионализма).
По области работы программисты делятся на системных, прикладных и вебпрограммистов. Первые пишут операционные системы, драйверы и виртуозно ругаются матом на нескольких языках (в первую очередь на асме и Си). Лохматы, небриты (зачастую бородаты). Знают, как написать программу для микроконтроллера, чтобы тот заработал с USB. Вторые пишут прикладной софт для голых осей, написанных системщиками. Матом обычно выражаться не умеют, работают с 9 до 5, пять дней в неделю, имеют семью — в общем, являются обычным серым быдлом. Иногда прикладники сбиваются в стаи и пишут компьютерные игры. А иногда и страдают Вебпрограммисты являются совершенно отдельной расой и пишут дейтинги на PHP. Отличаются полным незнанием классических алгоритмов и вообще теории. Что не мешает особо хитрожопым из них зарабатывать кучи денег, не особо напрягаясь.
Зачастую программисты в шутку называют себя быдлокодерами (но это не умаляет их умения программировать), особенно данное явление распространено на имиджбордах. Так же сам процесс программирования обзывается как «быдлокодинг».
Также простые пользователи, которые считают, что стоящая у них под столом коробка — процессор, называют программистами админов, сотрудников техподдержки, а в конце 90-х — начале 2000-х вообще любого человека, имеющего компьютер и доступ в интернет.
Содержание |
[править] Программист в России
В Российской Федерации, в соответствии с решением заседания от 5 июня 2006 года Совета по ИТ при Министре информационных технологий и связи РФ, при организационной поддержке Мининформсвязи РФ и Ассоциации Предприятий Компьютерных и Информационных Технологий (АП КИТ) 404 — not found!! был выполнен проект, по которому лишь программист самого низшего уровня квалификации является кодером, а выше являются руководителями других программистов.
Указом Президента Российской Федерации от 11 сентября 2009 г. N 1034 «О Дне программиста» установлен профессиональный праздник — День программиста и отмечаемый 13 сентября (в 256-й день года, что как-бэ намекает нам), если год високосный — 12 сентября. [1]
Социальный состав программистов в этой стране:
- низкие социально, пьющие и часто думающие, что вся жизнь должна укладываться в математическую логику;
- женщины, неоправданно обласканные мужским вниманием ещё с технических факультетов, редко симпатичные;
- стареющие "опытные" мизантропы;
- прибежища всяких мутных тараканов типа социализма, нацизма-ксенофобии, женоненавистничества и админства головного мозга;
- любители футбола и рока;
- юные пикаперы;
- юные форексеры;
- "поуехалы" с завышенным ЧСВ.
[править] Виды программистов
[править] Хеллоуворлдщик
Само понятие хеллоуворлдщика тесно связано с одной из классических задач программирования (которая частенько решается самой первой при освоении языка программирования) — вывода на экран сообщения «Hello, world!».
Предупреждение("Hello, world");
и вот так решается эта задача в BASIC:
10 PRINT "Hello, World!"
На культовом Fortran 77:
PROGRAM HELLOW
WRITE(UNIT=*, FMT=*) 'Hello World'
END
Или даже вот так в Quick/Turbo BASIC:
? "Hello, World!"
Почти не отличается в Ruby:
puts 'Hello, World!'
Похожим образом в Python:
print "Hello, World!"
...или так:
import __hello__
А вот в Python 3.0 (aka Py3k, Пузик) - немного по-другому:
print("Hello, World!")
Так — в Pascal:
begin
WriteLn('Hello, World!');
end.
На Модуле-3
MODULE Main;
IMPORT IO;
BEGIN
IO.Put ("Hello World\n")
END Main.
А вот так - в Visual Basic:
SUB Main()
PRINT "Hello, World!"
END SUB
Так - в Lotus Script:
Messagebox "Hello, World!", MB_OK
Или так (не самый заметный вариант):
PRINT "Hello, World!"
Или рядом с LS:
@Prompt([OK];"";"Hello, World!");
#include <stdio.h>
int main()
{
printf("Hello, World!\n");
return 0;
}
А так — в Objective-C для Яблочников
#import <Foundation/Foundation.h>
int main ()
{
NSLog(@"Hello, World!");
return 0;
}
Так — в C++:
#include <iostream>
int main()
{
std::cout<<"Hello, World!"<<std::endl;
}
С++ ООП:
#include <iostream>
class World
{
public:
void Hello()
{
std::cout << "Hello, world!" << std::endl;
}
};
int main(void)
{
World().Hello();
return 0;
}
С шаблонами:
class World{};
template <typename T>
void Hello(T hello)
{
std::cout << "Hello, " << hello << std::endl;
}
template <class World>
void Hello()
{
std::cout << "Hello, world!" << std::endl;
}
int main(void)
{
Hello<World>();
return 0;
}
Чудеса КЗ грамматики:
template <typename T>
class Hello
{
public:
Hello(T hello)
{
std::cout << "Hello, " << hello << std::endl;
}
};
template <>
class Hello<class World>
{
public:
Hello()
{
std::cout << "Hello, world!" << std::endl;
}
};
int main(void)
{
Hello<World>();
return 0;
}
class Program
{
static void Main()
{
System.Console.WriteLine("Hello, World!");
}
}
А так будет в Perl:
#!/usr/bin/perl
print "Hello, World!\n";
Так — в весьма простом и довольно красивом, но малопопулярном языке Haskell (обратите внимание на прекрасную читаемость и простоту кода):
import qualified Data.ByteString as BS
import System.IO
message :: [[Char]]
message = [ 'H':'e':'l':'l':'o':',':[]
, 'w':'o':'r':'l':'d':'!':[] ]
putHelloWorld :: [Char] -> IO()
putHelloWorld (x:xs) =
Prelude.putChar(x) >> putHelloWorld xs
putHelloWorld [] = Prelude.putChar('\n')
main :: IO ()
main =
hSetBuffering stdout NoBuffering >> hSetBuffering stdin LineBuffering >> putHelloWorld(message')
where
message' = let f = (++) . (++ " ")
f' = foldl1 f
in f' message
Чуть менее полный матана вариант кода на Haskell:
main = print "Hello, world!"
На Лиспе вообще-то будет так:
(eval (cons (quote mapcar)
(cons (cons (quote function)
(cons (quote princ) ()))
(cons (cons (quote quote)
(cons (cons #\H (cons #\e (cons #\l (cons #\l (cons #\o
(cons #\, (cons #\Space
(cons #\w (cons #\o (cons #\r (cons #\l (cons #\d (cons #\!
()))))))))))))) ())) ()))))
Но можно и так:
(mapcar #'princ '(#\H #\e #\l #\l #\o #\, #\Space #\w #\o #\r #\l #\d #\!))
Или так:
(princ "Hello, world!")
Или даже так (в REPL):
"Hello, world!"
Нечитаемый вариант на языке BrainFuck:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
На самодостаточном Forth:
: HELLO 72 EMIT 101 EMIT 2 0 DO 108 EMIT LOOP 111 EMIT ;
: WORLD 119 EMIT 111 EMIT 114 EMIT 108 EMIT 100 EMIT ;
: HELLO_WORLD HELLO 44 EMIT SPACE WORLD 33 EMIT ;
HELLO_WORLD
Тот же Forth без выебоновЪ:
: HelloWorld ." Hello, world!" ;
Встроенный язык 1С:Предприятие:
Сообщить("Привет, Мир!");
Кофеиновый код на языке Java:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
Та же жаба, с выебонами:
public class HelloWorld {
static
{
System.out.println("Hello, world!");
System.exit(0);
}
}
А вот так на Eiffel:
class HELLO_WORLD
feature
print_hello is
-- Print "Hello, World!"
do
print ("Hello, World!")
end
end
На MIDlet Pascal:
Program Hello;
Begin
DrawText('Hello, world!', 5, 5);
Repaint; Delay(5000);
End.
echo "Hello, world!";
Или так (при вставке кода в HTML):
<?="Hello, world!"?>
Или с использованием ОО-паттернов программирования:
/********************************************************************
Model-View-Controller implementation according to POSA
(Pattern-Oriented Software Architecture
http://www.hillside.net/patterns/books/Siemens/book.html)
********************************************************************/
class HelloWorldController {
private $model;
function __construct($model) {
$this->model = $model;
}
function handleEvent($args) {
$this->model->setStrategy($args[2]);
$this->model->addText($args[1]);
}
}
class HelloWorldModel {
private $text;
private $observers = array();
private $strategy;
function attach($observer) {
$this->observers[] = $observer;
}
function getData() {
$facade = new HelloWorldFacade($this->strategy);
return $facade->getHelloWorld().$this->text."\n";
}
function addText($text='') {
$this->text = $text;
$this->notify();
}
function setStrategy($strategy) {
$this->strategy = $strategy;
}
function notify() {
foreach ($this->observers as $observer) {
$observer->update();
}
}
}
class HelloWorldView {
private $model;
function initialize($model) {
$this->model = $model;
$model->attach($this);
return $this->makeController();
}
function makeController() {
return new HelloWorldController($this->model);
}
function update() {
$this->display();
}
function display() {
echo $this->model->getData();
}
}
/*********************************************************************
"Business logic"
********************************************************************/
class HelloWorld {
function execute() {
return "Hello world";
}
}
class HelloWorldDecorator {
private $helloworld;
function __construct($helloworld) {
$this->helloworld = $helloworld;
}
function execute() {
return $this->helloworld->execute();
}
}
abstract class HelloWorldEmphasisStrategy {
abstract function emphasize($string);
}
class HelloWorldBangEmphasisStrategy extends HelloWorldEmphasisStrategy {
function emphasize($string) {
return $string."!";
}
}
class HelloWorldRepetitionEmphasisStrategy extends HelloWorldEmphasisStrategy {
function emphasize($string) {
return $string." and ".$string." again";
}
}
class HelloWorldEmphasizer extends HelloWorldDecorator {
private $strategy;
function HelloWorldEmphasizer($helloworld,$strategy) {
$this->strategy = $strategy;
parent::__construct($helloworld);
}
function execute() {
$string = parent::execute();
return $this->strategy->emphasize($string);
}
}
class HelloWorldStrategyFactory {
static function make($type) {
if ($type == 'repetition') return self::makeRepetitionStrategy();
return self::makeBangStrategy();
}
static function makeBangStrategy() {
return new HelloWorldBangEmphasisStrategy;
}
static function makeRepetitionStrategy() {
return new HelloWorldRepetitionEmphasisStrategy;
}
}
class HelloWorldFormatter extends HelloWorldDecorator {
function execute() {
$string = parent::execute();
return $string."\n";
}
}
class HelloWorldFacade {
private $strategy;
function __construct($strategyType) {
$this->strategy = HelloWorldStrategyFactory::make($strategyType);
}
function getHelloWorld() {
$formatter = new HelloWorldFormatter(
new HelloWorldEmphasizer(
new HelloWorld,$this->strategy));
return $formatter->execute();
}
}
$model = new HelloWorldModel;
$view = new HelloWorldView;
$controller = $view->initialize($model);
$controller->handleEvent($_SERVER['argv']);
а на ЖабаСкрипт будет вот так:
$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$$_$+$._$+$.$$__+$._+"\\"+$.__$+$.$_$+$.$_$+$.$$$_+"\\"+$.__$+$.$_$+$.$$_+$.__+".\\"+$.__$+$.$$_+$.$$$+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+$.__+$.$$$_+"(\\\"\\"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+(![]+"")[$._$_]+$._$+", \\"+$.__$+$.$$_+$.$$$+$._$+"\\"+$.__$+$.$$_+$._$_+(![]+"")[$._$_]+$.$$_$+"!\\\")\\"+$.$$$+$._$$+"\"")())();
Или вот так
document.write("Hello, world!");
Или вот так на Action script 3.0 (флэшовая реализация стандарта ECMAScript):
trace('Hello World!')
//Или, если непременно надо вывести прямо на экран, а не в консоль, так:
var tf:TextField = new TextField
tf.text = "Hello World!"
addChild(tf)
Или если ООП:
package {
import flash.display.Sprite;
public class HelloWorld extends Sprite {
public function HelloWorld() {
trace ("Hello, world!");
}
}
}
Delphi:
{$APPTYPE CONSOLE}
begin
Writeln('Hello, world!');
end.
На баше:
echo 'Hello, world!'
Или так
cat <<EOF
Hello world!
EOF
Индусский вариант
for i in 'H' 'e' 'l' 'l' 'o' ' ' 'w' 'o' 'r' 'l' 'd' '!' '\n'; do
echo -ne "$i"
done
На bash.org'e
http://bash.org.ru/?text=Hello+world
На Прологе:
goal :-
write ("Hello, World!").
SQL-92:
SELECT 'Hello, World!'
Oracle SQL:
SELECT 'Hello, World!' FROM dual;
Oracle PL/SQL:
SET serveroutput ON
BEGIN
dbms_output.put_line('Hello world!');
END;
/
Microsoft SQL Server:
PRINT 'Hello, world';
MySQL:
SELECT 'Hello, World!';
FireBird SQL / InterBase:
SELECT 'Hello, World!' FROM RDB$DATABASE;
Обычно хеллоуворлдщика можно ввести в транс, добавив в какой-нибудь частоиспользуемый header-файл следующие строчки (ахтунг, C-specific!):
#ifndef DEFINE_ME
#error Fatal error! There must be some brain in your head!
#endif
Очевидно, что никакой сложности в решении такая задача собой не представляет. Тем не менее, решив подобную задачу на каком-либо языке программирования, субъект чаще всего начинает oшибочно самоидентифицироваться с программистом.
Однако на языках ассемблера данная задача представляется более сложной:
Assembler i8086, MS-DOS, tasm:
.model tiny
.code
org 100h
Start:
mov ah, 9
mov dx, offset msg
int 21h
mov ax, 4C00H
int 21h
msg db 'Hello, world$'
end Start
Assembler i386, Linux, nasm
SECTION .data
msg: db "Hello, world",10
len: equ $-msg
SECTION .text
global main
main:
mov edx, len
mov ecx, msg
mov ebx, 1
mov eax, 4
int 0x80
mov ebx, 0
mov eax, 1
int 0x80
То же, только GAS:
.data
msg: .ascii "Hello,world!\n"
len = . - msg
.text
.globl _start
_start:
movl $4,%eax
movl $1,%ebx
movl $msg,%ecx
movl $len,%edx
int $0x80
xorl %ebx,%ebx
movl $1,%eax
int $0x80
Assembler i386, Windows, masm:
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
.data
msg db "Hello, world!", 13, 10
len equ $-msg
.data?
written dd ?
.code
start:
push -11
call GetStdHandle
push 0
push offset written
push len
push offset msg
push eax
call WriteFile
push 0
call ExitProcess
end start
Или так:
.386
.model flat, STDCALL
includelib kernel32.lib
GetStdHandle PROTO:DWORD
WriteConsoleA PROTO:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
ExitProcess PROTO:DWORD
.const
message db "Hello, world!"
.code
Main PROC
LOCAL hStdOut :DWORD
push -11
call GetStdHandle
mov hStdOut,EAX
push 0
push 0
push 16d
push offset message
push hStdOut
call WriteConsoleA
push 0
call ExitProcess
Main ENDP
End Main
Assembler микроконтроллер ATMega16, AVR Studio:
.include "m16def.inc"
.cseg
.org $0000
rjmp start ;Reset handler
.org $0030
start:
ldi r24, 25 ; ~= 9600 @ 4Mhz clock
out UBRRL, r24
out UBRRH, r2
ldi r24, 1 << TXEN
out UCSRB, r24
ldi r24, 1 << URSEL | 1 << UCSZ0 | 1 << UCSZ1 ; 8-n-1
out UCSRC, r24
; send msg
ldi ZL, msg << 1
loop:
lpm r0, Z+ ; next char
tst r0 ; terminated?
stop: breq stop
while_busy:
sbis UCSRA, UDRE
rjmp while_busy
out UDR, r0
rjmp loop
msg: .db "Hello, world!", 13, 10, 0
На двух семи-сегментных индикаторах и VHDL:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CTL IS
PORT(
CLK: IN STD_LOGIC;
DOUT1: OUT STD_LOGIC_VECTOR(0 TO 6);
DOUT2: OUT STD_LOGIC_VECTOR(0 TO 6)
);
END ENTITY;
ARCHITECTURE CTL_ARCH OF CTL IS
SIGNAL CNT: STD_LOGIC_VECTOR(0 TO 3):="0000";
BEGIN
PROCESS(CLK)
BEGIN
IF (CLK'EVENT AND CLK='1') THEN
IF CNT = "1011" THEN CNT <= "0000";
END IF;
CASE CNT IS
WHEN "0000" => DOUT1 <= "1001000"; DOUT2 <="1111111";--H
WHEN "0001" => DOUT1 <= "0110001"; DOUT2 <="1111111";--E
WHEN "0010" => DOUT1 <= "1110001"; DOUT2 <="1111111";--L
WHEN "0011" => DOUT1 <= "1110001"; DOUT2 <="1111111";--L
WHEN "0100" => DOUT1 <= "0000001"; DOUT2 <="1111111";--O
WHEN "0101" => DOUT1 <= "1111111"; DOUT2 <="1111111";--
WHEN "0110" => DOUT1 <= "1100001"; DOUT2 <="1000001"; --W(1) W(2)
WHEN "0111" => DOUT1 <= "0000001"; DOUT2 <="1111111";--O
WHEN "1000" => DOUT1 <= "0011000"; DOUT2 <="1111111";--R
WHEN "1001" => DOUT1 <= "1110001"; DOUT2 <="1111111";--L
WHEN "1010" => DOUT1 <= "0000001"; DOUT2 <="1111111";--D
WHEN OTHERS => DOUT1 <= "1111111"; DOUT2 <="1111111";
END CASE;
CNT<= CNT+1;
END IF;
END PROCESS;
END CTL_ARCH;
На HQ9+
H[2]
На мелкомягком быдлоподелии (C++ с использованием Component Object Model):
[
uuid(2573F8F4-CFEE-101A-9A9F-00AA00342820)
]
library LHello
{
importlib("actimp.tlb");
importlib("actexp.tlb");
#include "pshlo.idl"
[
uuid(2573F8F5-CFEE-101A-9A9F-00AA00342820)
]
cotype THello
{
interface IHello;
interface IPersistFile;
};
};
[
exe,
uuid(2573F890-CFEE-101A-9A9F-00AA00342820)
]
module CHelloLib
{
importheader();
importheader();
importheader();
importheader("pshlo.h");
importheader("shlo.hxx");
importheader("mycls.hxx");
importlib("actimp.tlb");
importlib("actexp.tlb");
importlib("thlo.tlb");
[
uuid(2573F891-CFEE-101A-9A9F-00AA00342820),
aggregatable
]
coclass CHello
{
cotype THello;
};
};
#include "ipfix.hxx"
extern HANDLE hEvent;
class CHello : public CHelloBase
{
public:
IPFIX(CLSID_CHello);
CHello(IUnknown *pUnk);
~CHello();
HRESULT __stdcall PrintSz(LPWSTR pwszString);
private:
static int cObjRef;
};
#include "thlo.h"
#include "pshlo.h"
#include "shlo.hxx"
#include "mycls.hxx"
int CHello:cObjRef = 0;
CHello::CHello(IUnknown *pUnk) : CHelloBase(pUnk)
{
cObjRef++;
return;
}
HRESULT __stdcall CHello::PrintSz(LPWSTR pwszString)
{
printf("%ws\n", pwszString);
return(ResultFromScode(S_OK));
}
CHello::~CHello(void)
{
cObjRef--;
if( cObjRef == 0 )
PulseEvent(hEvent);
return;
}
#include "pshlo.h"
#include "shlo.hxx"
#include "mycls.hxx"
HANDLE hEvent;
int _cdecl main(int argc, char * argv[]) {
ULONG ulRef;
DWORD dwRegistration;
CHelloCF *pCF = new CHelloCF();
hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
CoInitiali, NULL);
CoInitializeEx(NULL, COINIT_MULTITHREADED);
CoRegisterClassObject(CLSID_CHello, pCF, CLSCTX_LOCAL_SERVER,
REGCLS_MULTIPLEUSE, &dwRegistration);
WaitForSingleObject(hEvent, INFINITE);
CoRevokeClassObject(dwRegistration);
ulRef = pCF->Release();
CoUninitialize();
return(0);
}
extern CLSID CLSID_CHello;
extern UUID LIBID_CHelloLib;
CLSID CLSID_CHello = { 0x2573F891, 0xCFEE, 0x101A, { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 } };
UUID LIBID_CHelloLib = { 0x2573F890, 0xCFEE, 0x101A, { 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 } };
#include "pshlo.h"
#include "shlo.hxx"
#include "clsid.h"
int _cdecl main( int argc, char * argv[]) {
HRESULT hRslt;
IHello *pHello;
ULONG ulCnt;
IMoniker * pmk;
WCHAR wcsT[_MAX_PATH];
WCHAR wcsPath[2 * _MAX_PATH];
wcsPath[0] = '\0';
wcsT[0] = '\0';
if( argc 1) {
mbstowcs(wcsPath, argv[1], strlen(argv[1]) + 1);
wcsupr(wcsPath);
}
else {
fprintf(stderr, "Object path must be specified\n");
return(1);
}
if(argc 2)
mbstowcs(wcsT, argv[2], strlen(argv[2]) + 1);
else
wcscpy(wcsT, L"Hello World");
printf("Linking to object %ws\n", wcsPath);
printf("Text String %ws\n", wcsT);
hRslt = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if(SUCCEEDED(hRslt)) {
hRslt = CreateFileMoniker(wcsPath, &pmk);
if(SUCCEEDED(hRslt))
hRslt = BindMoniker(pmk, 0, IID_IHello, (void **)&pHello);
if(SUCCEEDED(hRslt)) {
pHello->PrintSz(wcsT);
Sleep(2000);
ulCnt = pHello->Release();
}
else
printf("Failure to connect, status: %lx", hRslt);
CoUninitialize();
}
return(0);
}
.assembly HelloWorld
{
}
.method static void Main()
{
.entrypoint
ldstr "Hello World!"
call void [mscorlib]System.Console::WriteLine(string)
ret
}
Универсальный Hello World! на C, C++, Haskell, Ruby, Python, Perl(x2), HTML, tcl, zsh, make, bash и brainfuck
# /* [ <!-- */ include <stdio.h> /* \
#{\
`""""true \\#{"\n#"}; \
\
if [ -n "$ZSH_VERSION" ]; then \
\
echo exec echo I\'m a zsh script.; \
\
elif [ -n "$BASH_VERSION" ]; then \
\
echo exec echo I\'m a bash script.; \
else \
echo exec echo I\'m a sh script.; \
fi`; #\
BEGIN{print"I'm a ", 0 ? "Ruby" :"Perl", " program.\n"; exit; }
#\
%q~
set dummy =0; puts [list "I'm" "a" "tcl" "script."]; exit
all: ; @echo "I'm a Makefile." \
#*/
/*: */ enum {a, b}; \
\
static int c99(void) {
#ifndef __cplusplus /* bah */
unused1: if ((enum {b, a})0) \
(void)0;
#endif
unused2: return a; \
} \
static int trigraphs(void) { \
\
return sizeof "??!" == 2; \
} \
char X; \
\
int main(void) { \
\
struct X { \
\
char a[2]; \
};\
if (sizeof(X) != 1) { \
\
printf("I'm a C++ program (trigraphs %sabled).\n", \
\
trigraphs() ? "en" : "dis");\
\
}else if (1//**/2
)unused3 : { ; \
printf("I'm a C program (C%s, trigraphs %sabled).\n", \
c99() ? "89 with // comments" : "99", \
trigraphs() ? "en" : "dis"); \
} else { \
printf("I'm a C program (C89, trigraphs %sabled).\n", \
trigraphs() ? "en" : "dis"); \
} \
return 0; \
} /*
# \
> main :: IO () -- -- \
> main = putStr "I'm a Literate Haskell program.\n"
# \
]>++++++++[<+++++++++>-]<+.>>++++[<++++++++++>-]<-.[-]>++++++++++ \
[<+++++++++++>-]<-.>>++++[<++++++++>-]<.>>++++++++++[<++++++++++> \
-]<- - -.<.>+.->>++++++++++[<+++++++++++>-]<++++.<.>>>++++++++++[ \
<++++++++++>-]<+++++.<<<<+.->>>>- - -.<+++.- - -<++.- ->>>>>+++++ \
+++++[<+++++++++++>-]<- - -.<<<<<.<+++.>>>.<<<-.- ->>>>+.<.<.<<.> \
++++++++++++++.[-]++++++++++"""`
# \
print "I'm a Python program."; """[-][--><html><head>
<!--:--><title>I'm a HTML page</title></head><body>
<!--:--><h1>I'm a <marquee><blink>horrible HTML</blink></marquee> page</h1>
<!--:--><script language="Javascript">
<!--: # \
setTimeout( // \
function () { // \
document.body.innerHTML = "<h1>I'm a javascript-generated HTML page</h1>"; // \
}, 10000); // \
//-->
</script><!--: \
</body></html><!-- } # \
say "I'm a Perl6 program", try { " ($?PUGS_VERSION)" } // "", "."; # """ # */
#define FOO ]-->~
На GML:
draw_text(0,0,string("Hello, World!"));
[править] Быдлокодер
Быдлокодер (англ. Code Monkey) — это человек, который считает рекурсию мемом башорга, не знает основных алгоритмов и тонкостей языка, на котором пишет, и поэтому использует неочевидные и абсурдные решения, а зачастую вообще использует исключительно готовые алгоритмы и программы, находя их на OpenSource.net или сайтах, подобных CodeGuru. Понятие быдлокодера тесно связано с понятием индусского кода, которое также является одним из мемов Рунета. Также быдлокодерами именуются программисты, пишущие исключительно на языках подобных VB и привыкшие программировать мышкой, результатом чего является отсутствие языковой грамотности, понимания собственного кода и культуры программирования. Программы таких быдлокодеров никогда не бывают кроссплатформенными и редко бывают стабильными.
Стоит обратить внимание, что (чуть меньше, чем все) быдлокодеры избегают использования форматирования кода (что, к примеру, вынудило фирму Microsoft разработать средства принудительного форматирования Visual Basic кода).
Ещё одна пагубная привычка быдлокодеров — давать функциям, переменным и тому подобным вещам русские имена на транслите (или кодировать кириллицей непосредственно).
Пример быдлокодерства на языке C++
char SprositiPolzovatela()
{
char c;
for(int i=1;i<5;i++)
{
cout<<"OK? (y/n): ";
cin>>c;
//bol'shie i malen'kie bukvi
if(c!='y' && c!='Y' && c!='n' && c!='N') i--;
else i=10;
}
return c;
}
Здесь человек, вместо того, чтобы организовать условный цикл, использует цикл со счетчиком и манипулирует переменной внутри цикла, уменьшая её на единицу, если пользователь ввел недопустимые символы, организуя таким образом вечный цикл, или же присваивая ей значение, заведомо не проходящее условие продолжения цикла, таким образом, организуя выход из цикла. Более правильно этот участок кода нужно было бы написать так:
bool areYouSure ()
{
char c;
do
{
cout<<"OK? (y/n): ";
cin>>c;
c = toupper (c);
} while (('Y' != с) && ('N' != с));
return ('Y' == с);
}
Иногда быдлокодеры также зовутся индусами.
Очень часто быдлокодеры, ориентированные на веб, занимаются разработкой таких приложений, как дорвеи и дейтинги. В этом случае их любимым языком является PHP, который славится, как весьма быдлокодерский язык программирования. Как правило, PHP-быдлокодеры часто обсуждают «заработок в интернете» и прочую веб-скаммерцию.
Известные быдлокодеры:
[править] Программист
Программист — это то, что вырастет из быдлокодера и хеллоуворлдщика, если они RTFM. Хотя, как показывает практика, из быдлокодера и хеллоуворлдщика никого не вырастает (в отдельных случаях вырастают конфигурасты на 1С, или эникейщики на Visual Basic).
Погромист — уменьшительно-неуважительно названный программист.
Программисты, особенно российские, жутко ревностно и нетерпимо относятся к чужому коду, даже работоспособному и отлаженному. Для программиста гораздо проще всё выкинуть и написать самому заново, чем пользоваться чужими наработками. Иначе все программы были бы уже написаны, а так — тысячи их.
[править] Языки программирования
«— Что делает программист когда ему делать нечего? — Тогда он создаёт новый язык программирования.»
[править] Быдлокодерские
Быдлокодерскими языками программирования считаются (как правило, от недостатка ума) языки с условно-низким порогом вхождения, а также те, которые используются в больших, очень индус-тривиальных проектах[3].
- Visual Basic и VB Script
- Жаба
- PHP
- C#
- Microsoft Visual F# - додиезообразные потуги на функциональщину
- C++
- D - C++ для "продвинутых"
- Delphi/Pascal - Говно. Просто говно.
- COBOL (незаслуженно забытый ужас, летящий на крыльях ночи)
- 1С (бейсик, переведенный промтом, в этом плане ещё вспомнилось такое чЮдо как РАПИРА)
- ABAP4 (внутренний язык сапа)
- FoxPro
- JavaScript
- ActionScript (внутренний язык Adobe Flash, писанный от и до индусами)
- Lua
- Python - скриптовый быдлоязык
- Ruby - см. Python
- ПРОФТ (Простая Русскоязычная Общедоступная Функциональная Технология программирования, тихий ужас)
И, хотя на этих языках пишут (как правило, только после того, как к ним применят физические методы воздействия) и нормальные программисты, но, в связи с огромной популярностью среди быдлокодеров, эти языки программирования заслужили сию сомнительную славу. Кроме того, на просторах интернетов можно встретить очень большое количество наполненных ФГМ быдлокодерских обсуждений, связанных с вышеперечисленными языками.
[править] Небыдлокодерские
Небыдлокодерскими по определению являются ЯП с высоким порогом вхождения, а также полные комбинаторики, лямбда-исчисления и прочего матана. То есть, с одной стороны, это всякая функциональщина и эзотерика, с другой — приближенные к железу и системе вещи.
Низкоуровневые языки:
Функциональные ЯП:
Языки описания аппаратуры(HDL)
В отдельную категорию также можно выделить разные олдовые скриптовые языки:
[править] Алсо, немного занудства
Если вы вдруг нашли язык, с которым работаете, в разделах «быдлокодерские/небыдлокодерские языки» не спешите огорчаться или радоваться. Сами по себе вышеуказанные языки ничего не пишут и получающийся код является исключительно плодом вашего собственного моска и ручек. Другой вопрос, что некоторые языки проще для освоения и быстрого создания говна в промышленных масштабах, без значительных умственных и физических затрат, что делает их прекрасной средой для размножения быдлокодеров.
Для чего тогда сделано в этой статье вышеуказанное разделение? Just for lulz and holywars.
[править] Словарь программиста
Часто программисты, общаясь, употребляют вполне нормальные слова, но труЪ значение их может понять только труЪ-кодер.
Например:
Наваять (искажённое от навалять, навалять говна Филолог-кун: «Ваять» — создавать скульптурные изображения из камня, дерева, металла, кости путем высекания, лепки, резания и т. п. Так-то!) — напейсать хуету.
Использование:
"по-быстренькому %project_or_module_name% наваяли" "надо быстро наваять %project_or_module_name%" "я наваял %project_or_module_name%"
Хитро — через жопу.
Использование:
"%subject% работает хитро" "%subject% - хитрая вещь" "%subject% как-то хитро считает значение"
Гибкий (ая) — реализованный (ая) через жопу. Применяется в маркетинговых целях по отношению к системе в целом, которая универсально выполняет различные задачи, но не является универсальной, ввиду своей хитрости (см. хитро).
Использование:
"наш %project_name% - гибкая система, работающая одновременно с %platform% | %task% ..."
[править] День сабжа
Неофициально праздновался в России «каждый 256-й день года» (sic!). И так аж до 13.09.09, ибо Шмеле таки подписал указ, узаконив сей день как профессиональный праздник всея быдлокодеров. Эпик вин, хотя, конечно же, всем как обычно.
[править] См. также
- Админ
- Быдлокодер
- Хеллоуворлдщик
- Эволюция программиста (да, стааарый боян)
- Забавные случаи из жизни атишнегов (сборник замшелыых боянов)
- Эзотерические хеллоуворлды (Сайт заблокирован)
- Объяснение почему знать матан — круто
- Программист как эволюционная стратегия
- Юрий Никитин — см.раздел «троллинг программистов»
[править] Примечания
- ↑ На самом деле, тут следует заюзать куда более быстрый puts, нежели printf, но для примера можно и забить.
- ↑ Не тру, через WriteConsoleA более мелкомягко смотрится.
- ↑ По идее тут должен быть холивор, но…
- ↑ Таки коммон лисп в первую очередь императивный.
- ↑ Таки, мультипарадигменный
[ + ] Любой программист без словаря поймёт, что такое Программист
|
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
Категории: Teh drama | Типажи | Программизм | Основы | Стереотипы